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 相关文章推荐
js 字符串操作函数
Jul 25 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
Apr 12 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
jquery制作居中遮罩层效果分享
Feb 21 Javascript
javascript函数中的3个高级技巧
Sep 22 Javascript
原生JS中slice()方法和splice()区别
Mar 06 Javascript
vue.js组件之间传递数据的方法
Jul 10 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
Jul 31 Javascript
D3.js实现简洁实用的动态仪表盘的示例
Apr 04 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
Apr 30 Javascript
javascript实现一款好看的秒表计时器
Sep 05 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下封装较好的数字分页方法
2010/11/23 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
Bootstrap Table使用整理(一)
2017/06/09 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python检测生僻字的实现方法
2016/10/23 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
python代码区分大小写吗
2020/06/17 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
写求职信有什么意义
2014/02/17 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
学雷锋标语
2014/06/25 职场文书
护理专科学生自荐书
2014/07/05 职场文书
课外科技活动总结
2014/08/27 职场文书
解除租房协议书
2014/12/03 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
青年教师个人总结
2015/02/11 职场文书
在人间读书笔记
2015/06/30 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书