Js利用Canvas实现图片压缩功能


Posted in Javascript onSeptember 13, 2017

最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。以下是具体实现:

/* 
 * 图片压缩
 * img    原始图片
 * width   压缩后的宽度
 * height  压缩后的高度
 * ratio   压缩比率 
 */
 function compress(img, width, height, ratio) {        
   var canvas, ctx, img64;
        
   canvas = document.createElement('canvas');        
   canvas.width = width;
   canvas.height = height;
        
   ctx = canvas.getContext("2d");        
   ctx.drawImage(img, 0, 0, width, height);
        
   img64 = canvas.toDataURL("image/jpeg", ratio);
        
   return img64;
 }

上面是一个图片压缩函数,返回 base64 格式的图片数据。 其中压缩比率取值(0 - 1 之间)越大图片质量越高。建议不要将图片转为 png 格式,因为转为 png 格式,图片的 base64 比转为 jpeg 的要长不少。下面是实际调用:

var image = new Image();
image.src = "/img/test.jpg";
      
image.onload = function(){
  var img64 = compress(image, 500, 400, 0.7);
  document.getElementById("test").src = img64;
}

注意: 压缩方法的调用以及图片src赋值必须放在图片的 onload 方法里面。因为只有等图片加载完成后才能进行压缩处理,从而转换为base64 进行赋值。 如果放在 onload 方法外面,则可能压缩代码无效,或者会生成一张纯黑色的图片。

以上这篇Js利用Canvas实现图片压缩功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
Jan 23 Javascript
理解javascript中的严格模式
Feb 01 Javascript
浅析Javascript中bind()方法的使用与实现
May 30 Javascript
详谈javascript精度问题与调整
Jul 08 Javascript
Angular.js中angular-ui-router的简单实践
Jul 18 Javascript
JavaScript与Java正则表达式写法的区别介绍
Aug 15 Javascript
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
js微信分享接口调用详解
Jul 23 Javascript
JavaScript实现Excel表格效果
Feb 07 Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 Javascript
js 倒计时(高效率服务器时间同步)
Sep 12 #Javascript
js Date()日期函数浏览器兼容问题解决方法
Sep 12 #Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 #Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 #Javascript
js数组实现权重概率分配
Sep 12 #Javascript
js 概率计算(简单版)
Sep 12 #Javascript
JavaScript面向对象精要(下部)
Sep 12 #Javascript
You might like
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
杏林同学录(五)
2006/10/09 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
表单提交验证类
2006/07/14 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
Node.js学习入门
2017/01/03 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
python实现杨辉三角思路
2017/07/14 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
python中实现栈的三种方法
2020/12/19 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
金士达面试非笔试
2012/03/14 面试题
应届生保险求职信
2013/11/11 职场文书
车间统计员岗位职责
2014/01/05 职场文书
小区消防演习方案
2014/02/21 职场文书
快递员岗位职责
2014/09/12 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
vue封装数字翻牌器
2022/04/20 Vue.js