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与flash交互通信基础教程
Aug 07 Javascript
得到jQuery detach()后节点中的某个值实现代码
Feb 05 Javascript
JS图片切换的具体方法(带缩略图版)
Nov 12 Javascript
Jquery节点遍历next与nextAll方法使用示例
Jul 22 Javascript
jQuery获取对象简单实现方法小结
Oct 30 Javascript
js实现文本框选中的方法
May 26 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
Oct 30 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 Javascript
vue v-on监听事件详解
May 17 Javascript
关于微信小程序登录的那些事
Jan 08 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写出自己的BLOG系统 2
2010/04/12 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python实现比较两个列表(list)范围
2015/06/12 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
大学生村官工作感言
2014/01/10 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书