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 相关文章推荐
Domino中运用jQuery读取视图内容的方法
Oct 21 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
jquery移动listbox的值原理及代码
May 03 Javascript
js获取url中的参数且参数为中文时通过js解码
Mar 19 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
JS 动态判断PC和手机浏览器实现代码
Sep 21 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
Mar 02 Javascript
详解angular用$sce服务来过滤HTML标签
Apr 11 Javascript
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
javascript实现异形滚动轮播
Nov 28 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中执行cmd命令的方法
2014/10/11 PHP
js查找父节点的简单方法
2008/06/28 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
javascript解析json实例详解
2014/11/05 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Anaconda入门使用总结
2018/04/05 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python 日志 logging模块详细解析
2020/03/31 Python
介绍一下Java中的static关键字
2012/05/12 面试题
企业给企业的表扬信
2014/01/13 职场文书
委托公证书范本
2014/04/03 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL