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 事件冒泡简介及应用
Jan 11 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
Jan 06 Javascript
jquery插件开发之实现google+圈子选择功能
Mar 10 Javascript
js实现创建删除html元素小结
Sep 30 Javascript
js实现新年倒计时效果
Dec 10 Javascript
JavaScript的字符串方法汇总
Jul 31 Javascript
JS简单获取当前日期和农历日期的方法
Apr 17 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 Javascript
vue移动端弹框组件的实例
Sep 25 Javascript
微信小程序实现九宫格抽奖
Apr 15 Javascript
超简单的微信小程序轮播图
Nov 22 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
Apr 28 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使用base64加密解密图片示例分享
2014/01/20 PHP
Yii实现简单分页的方法
2016/04/29 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
js电话号码验证方法
2015/09/28 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
Python递归函数特点及原理解析
2020/03/04 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
医学毕业生自荐信
2013/10/11 职场文书
社区庆八一活动方案
2014/02/02 职场文书
10的分与合教学反思
2014/04/30 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书