js生成缩略图后上传并利用canvas重绘


Posted in Javascript onMay 15, 2014

一般在处理图片上传时,通常的逻辑都是将源图片上传到服务器端,再由服务器端的语言进行缩放大小的操作。

此种模式一般可以满足大部分的需求,但当我们所需要的图片仅仅是一个符合规定大小的源图片的缩略图,再使用此种模式,将是一种浪费服务端资源以及带宽的方式,故我们考虑在浏览器端生成小图后再进行上传操作。

//以下为源代码

function drawCanvasImage(obj,width, callback){ var $canvas = $('<canvas></canvas>'), 
canvas = $canvas[0], 
context = canvas.getContext('2d'); 
var img = new Image(); 
img.onload = function(){ 
if(width){ 
if(width > img.width){ 
var target_w = img.width; 
var target_h = img.height; 
}else{ 
var target_w = width; 
var target_h = parseInt(target_w/img.width*img.height); 
} 
}else{ 
var target_w = img.width; 
var target_h = img.height; 
} 
$canvas[0].width = target_w; 
$canvas[0].height = target_h; 
context.drawImage(img,0,0,target_w,target_h); 
_canvas = canvas.toDataURL(); 
/*console.log(_canvas);*/ 
callback(obj,_canvas); 
} 
img.src = getFullPath(obj); 
} 
function getFullPath(obj) 
{ 
if(obj) 
{ 
//ie 
if (window.navigator.userAgent.indexOf("MSIE")>=1) 
{ 
obj.select(); 
return document.selection.createRange().text; 
} 
//firefox 
else if(window.navigator.userAgent.indexOf("Firefox")>=1 || $.browser.opera || $.browser.mozilla) 
{ 
if(obj.files && window.URL.createObjectURL) 
{ 
return window.URL.createObjectURL(obj.files[0]); 
} 
return obj.value; 
}else if($.browser.safari){ 
if(window.webkitURL.createObjectURL && obj.files){ 
return window.webkitURL.createObjectURL(obj.files[0]); 
} 
return obj.value; 
} 
return obj.value; 
} 
}

函数getFullPath为获取选中的图片的地址。

_canvas获取到的是base64编码的图片编码,将其传输到后端写入文件即可。

Javascript 相关文章推荐
Javascript常考语句107条收集
Mar 09 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
js调用百度地图及调用百度地图的搜索功能
Sep 07 Javascript
完美实现js焦点轮播效果(一)
Mar 07 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
Mar 13 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
javascript function(函数类型)使用与注意事项小结
Jun 10 Javascript
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
非常漂亮的js烟花效果
Mar 10 Javascript
小程序Scroll-view上拉滚动刷新数据
Jun 21 Javascript
从表单校验看JavaScript策略模式的使用详解
Oct 17 Javascript
Jquery性能优化详解
May 15 #Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 #Javascript
Javascript小技巧之生成html元素
May 15 #Javascript
javascript屏蔽右键代码
May 15 #Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 #Javascript
jquery如何判断表格同一列不同行input数据是否重复
May 14 #Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
May 14 #Javascript
You might like
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
python实现一次创建多级目录的方法
2015/05/15 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
pytorch masked_fill报错的解决
2020/02/18 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
药品促销活动方案
2014/02/14 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
应届生求职自荐信
2014/07/04 职场文书
党支部活动策划方案
2014/08/18 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2015大学生实训报告
2014/11/05 职场文书
小学科学教学计划
2015/01/21 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
Mysql开启外网访问
2022/05/15 MySQL