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 相关文章推荐
JS对URL字符串进行编码/解码分析
Oct 25 Javascript
Javascript 面向对象(三)接口代码
May 23 Javascript
jquery获取子节点和父节点的示例代码
Sep 10 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
js hover 定时器(实例代码)
Nov 12 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
js 原型对象和原型链理解
Feb 09 Javascript
Node.js利用debug模块打印出调试日志的方法
Apr 25 Javascript
vue做网页开场视频的实例代码
Oct 20 Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 Javascript
在JavaScript中如何使用宏详解
May 06 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
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
javascript document.compatMode兼容性
2010/02/23 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
javascript中的this详解
2014/12/08 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
JS监听组合按键思路及实现过程
2020/04/17 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python的迭代器和生成器使用实例
2015/01/14 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python编程之序列操作实例详解
2017/07/22 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Python3解释器知识点总结
2019/02/19 Python
详解Python字典的操作
2019/03/04 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
工作过失检讨书
2014/02/23 职场文书
社会发展项目建议书
2014/08/25 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
公务员政审材料
2014/12/23 职场文书
医院合作意向书范本
2015/05/08 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
sass 常用备忘案例详解
2021/09/15 HTML / CSS