找回密码
 立即注册
搜索
查看: 365|回复: 0

[js/jquery基础] Js利用Canvas实现图片压缩功能,多用于移动端处理图片上传问题

  [复制链接]
发表于 2023-2-23 20:04 | 显示全部楼层 |阅读模式
1、安卓各个系统版本不一样,多数会出现POST数据体不一样,为此,将图片转为base64再保存比较妥当。
2、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 方法外面,则可能压缩代码无效,或者会生成一张纯黑色的图片。

如果要保存到本地,请参看:将PHP 将dataurl[base64]转成图片image方法总结 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-10-18 16:44 , Processed in 0.024566 second(s), 13 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表