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 设计模式学习 Singleton
Jul 27 Javascript
js中 关于undefined和null的区别介绍
Apr 16 Javascript
JavaScript实现MIPS乘法模拟的方法
Apr 17 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
Sep 16 Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 Javascript
微信小程序实现评论功能
Nov 28 Javascript
JS实现鼠标按下拖拽效果
Jul 23 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
Jul 26 Javascript
vue-cli —— 如何局部修改Element样式
Oct 22 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 13 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中isset与array_key_exists的区别实例分析
2015/06/02 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
JS Array对象入门分析
2008/10/30 Javascript
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
Pycharm更换python解释器的方法
2018/10/29 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
本科生的职业生涯规划范文
2014/01/09 职场文书
精神文明建设标语
2014/06/16 职场文书
个人授权委托书格式
2014/08/30 职场文书
企业员工辞职信范文
2015/05/12 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android