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实现单继承和多继承的简单方法
Mar 29 Javascript
用Javascript实现Windows任务管理器的代码
Mar 27 Javascript
js函数的延迟加载实现代码
Oct 11 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
Sep 04 Javascript
JavaScript实现多个重叠层点击切换效果的方法
Apr 24 Javascript
jQuery实现下滑菜单导航效果代码
Aug 25 Javascript
jQuery unbind 删除绑定事件详解
May 24 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
Dec 02 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
Vue.js实现备忘录功能
Jun 26 Javascript
记一次react前端项目打包优化的方法
Mar 30 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个人网站架设连环讲(四)
2006/10/09 PHP
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
mysql数据库差异比较的PHP代码
2012/02/05 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
python检测IP地址变化并触发事件
2018/12/26 Python
django-allauth入门学习和使用详解
2019/07/03 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
Python如何根据时间序列数据作图
2020/05/12 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
建筑安全责任书范本
2014/07/24 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
教师个人年度总结
2015/02/11 职场文书