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 强制弹出窗口代码研究-又一款代码
Mar 20 Javascript
分享一个常用的javascript静态类
Dec 31 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
Apr 06 Javascript
浅谈javascript函数式编程
Sep 06 Javascript
详解Document.Cookie
Dec 25 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
Oct 28 Javascript
Avalonjs 实现简单购物车功能(实例代码)
Feb 07 Javascript
JavaScript实现精美个性导航栏筋斗云效果
Oct 29 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
May 30 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 Javascript
vue路由--网站导航功能详解
Mar 29 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 zip扩展Linux下安装过程分享
2014/05/05 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
Javascript连接Access数据库完整实例
2015/08/03 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
vue中如何使用ztree
2018/02/06 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
javascript实现一款好看的秒表计时器
2020/09/05 Javascript
Python devel安装失败问题解决方案
2020/06/09 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
施工安全协议书
2013/12/11 职场文书
房产买卖委托公证书
2014/04/04 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang