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切换功能的简单方法
Nov 23 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
Nov 17 Javascript
js onmousewheel事件多次触发问题解决方法
Oct 17 Javascript
jQuery实现新消息在网页标题闪烁提示
Jun 23 Javascript
详解javascript遍历方式
Nov 11 Javascript
全面解析Bootstrap表单使用方法(表单样式)
Nov 24 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
详解webpack+es6+angular1.x项目构建
May 02 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
JS实现点击拉拽轮播图pc端移动端适配
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
香妃
2021/03/03 冲泡冲煮
php生成WAP页面
2006/10/09 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
浅谈php调用python文件
2019/03/29 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
JS实现div模块的截图并下载功能
2017/10/17 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
Python 使用with上下文实现计时功能
2018/03/09 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
基于Python实现用户管理系统
2019/02/26 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
什么是类的返射机制
2016/02/06 面试题
英语专业毕业生自荐信范文
2013/12/31 职场文书
廉洁自律个人总结
2015/02/14 职场文书
茶花女读书笔记
2015/06/29 职场文书
详解Redis瘦身指南
2021/05/26 Redis
Python中else的三种使用场景
2021/06/16 Python
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android
windows系统安装配置nginx环境
2022/06/28 Servers