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模拟C#中List的简单实例
Mar 06 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
简介JavaScript中search()方法的使用
Jun 06 Javascript
JS阻止事件冒泡行为和闭包的方法
Jun 16 Javascript
bootstrap中添加额外的图标实例代码
Feb 15 Javascript
老生常谈js中0到底是 true 还是 false
Mar 08 Javascript
Javascript操作dom对象之select全面解析
Apr 24 Javascript
详解Angular2 关于*ngFor 嵌套循环
May 22 Javascript
小程序实现带年月选取效果的日历
Jun 27 Javascript
深入解析vue 源码目录及构建过程分析
Apr 24 Javascript
vue配置文件实现代理v2版本的方法
Jun 21 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
Feb 14 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发电子邮件
2006/10/09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实时获取cmd的输出
2015/12/13 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
大学生个人求职信范文
2013/09/21 职场文书
电子商务毕业生求职信
2013/11/10 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
技能比赛获奖感言
2014/02/14 职场文书
二年级小学生评语
2014/04/21 职场文书
小学领导班子对照材料
2014/08/23 职场文书
安全生产感想
2015/08/07 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL