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 相关文章推荐
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
Apr 30 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
Jun 09 Javascript
2010年最佳jQuery插件整理
Dec 06 Javascript
JS保留两位小数,多位小数的示例代码
Jan 07 Javascript
js实现的map方法示例代码
Jan 13 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
Feb 25 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
微信小程序 教程之WXSS
Oct 18 Javascript
快速解决vue-cli不能初始化webpack模板的问题
Mar 20 Javascript
微信小程序分享海报生成的实现方法
Dec 10 Javascript
Vue——解决报错 Computed property "****" was assigned to but it has no setter.
Dec 19 Vue.js
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页面间传递参数实例代码
2008/06/05 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
react-router实现跳转传值的方法示例
2017/05/27 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
集体备课反思
2014/02/12 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
具结保证书
2015/01/17 职场文书
杨善洲电影观后感
2015/06/04 职场文书
MySQL 字符集 character
2022/05/04 MySQL