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 相关文章推荐
个人总结的一些关于String、Function、Array的属性和用法
Jan 10 Javascript
一个简单的javascript类定义例子
Sep 12 Javascript
JavaScript 浏览器验证代码(来自discuz)
Jul 17 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
javascript实现的HashMap类代码
Jun 27 Javascript
Js apply方法详解
Feb 16 Javascript
原生js封装添加class,删除class的实例
Nov 06 Javascript
Vue.directive 自定义指令的问题小结
Mar 04 Javascript
Webpack中雪碧图插件使用详解
May 25 Javascript
js for终止循环 跳出多层循环
Oct 04 Javascript
js中的深浅拷贝问题简析
May 10 Javascript
p5.js实现简单货车运动动画
Oct 23 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 判断网页是否是utf8编码的方法
2014/06/06 PHP
限制复选框的最大可选数
2006/07/01 Javascript
js输出列表实现代码
2010/09/12 Javascript
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
js代码实现轮播图
2020/05/04 Javascript
小程序实现密码输入框
2020/11/16 Javascript
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
营业员个人总结的自我评价
2013/10/25 职场文书
顶岗实习计划书
2014/01/10 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
《草原》教学反思
2014/02/15 职场文书
求职信的正确写法
2014/07/10 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
董事长助理岗位职责
2015/02/11 职场文书