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实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
javascript 树控件 比较好用
Jun 11 Javascript
$.format,jquery.format 使用说明
Jul 13 Javascript
javascript 树形导航菜单实例代码
Aug 13 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
Aug 05 Javascript
jquery实现手风琴效果
Nov 20 Javascript
基于JavaScript实现随机颜色输入框
Dec 10 Javascript
Node.js与Sails redis组件的使用教程
Feb 14 Javascript
webpack实现热更新(实施同步刷新)
Jul 28 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
Feb 27 Javascript
支付宝小程序tabbar底部导航
Nov 06 Javascript
javascript实现文字跑马灯效果
Jun 18 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
php短信接口代码
2016/05/13 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
phpinfo的知识点总结
2019/10/10 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
微信小程序云开发之新手环境配置
2019/05/16 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
python搭建简易服务器分析与实现
2012/12/15 Python
python 使用get_argument获取url query参数
2017/04/28 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
python实现微信防撤回神器
2019/04/29 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
执行总经理岗位职责
2014/02/03 职场文书
《石榴》教学反思
2014/03/02 职场文书
承诺书模板
2014/08/30 职场文书
公司离职证明标准样本
2014/10/05 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android