杰克工作室 发表于 2023-2-23 20:04

Js利用Canvas实现图片压缩功能,多用于移动端处理图片上传问题

1、安卓各个系统版本不一样,多数会出现POST数据体不一样,为此,将图片转为base64再保存比较妥当。<br />
2、APP项目中手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。<br />
<br />
<br />
以下是具体实现:
<pre>
/*&nbsp;
&nbsp;*&nbsp;图片压缩
&nbsp;*&nbsp;img&nbsp;&nbsp;&nbsp;&nbsp;原始图片
&nbsp;*&nbsp;width&nbsp;&nbsp;&nbsp;压缩后的宽度
&nbsp;*&nbsp;height&nbsp;&nbsp;压缩后的高度
&nbsp;*&nbsp;ratio&nbsp;&nbsp;&nbsp;压缩比率&nbsp;
&nbsp;*/
&nbsp;function&nbsp;compress(img,&nbsp;width,&nbsp;height,&nbsp;ratio)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;var&nbsp;canvas,&nbsp;ctx,&nbsp;img64;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;canvas&nbsp;=&nbsp;document.createElement(&#39;canvas&#39;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;canvas.width&nbsp;=&nbsp;width;
&nbsp;&nbsp;&nbsp;canvas.height&nbsp;=&nbsp;height;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;ctx&nbsp;=&nbsp;canvas.getContext(&quot;2d&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;ctx.drawImage(img,&nbsp;0,&nbsp;0,&nbsp;width,&nbsp;height);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;img64&nbsp;=&nbsp;canvas.toDataURL(&quot;image/jpeg&quot;,&nbsp;ratio);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;return&nbsp;img64;
&nbsp;}</pre>
上面是一个图片压缩函数,返回 base64 格式的图片数据。 其中压缩比率取值(0 - 1 之间)越大图片质量越高。建议不要将图片转为 png 格式,因为转为 png 格式,图片的 base64 比转为 jpeg 的要长不少。下面是实际调用:

<pre>
var&nbsp;image&nbsp;=&nbsp;new&nbsp;Image();
image.src&nbsp;=&nbsp;&quot;/img/test.jpg&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
image.onload&nbsp;=&nbsp;function(){
&nbsp;&nbsp;var&nbsp;img64&nbsp;=&nbsp;compress(image,&nbsp;500,&nbsp;400,&nbsp;0.7);
&nbsp;&nbsp;document.getElementById(&quot;test&quot;).src&nbsp;=&nbsp;img64;
}</pre>
注意: 压缩方法的调用以及图片src赋值必须放在图片的 onload 方法里面。因为只有等图片加载完成后才能进行压缩处理,从而转换为base64 进行赋值。 如果放在 onload 方法外面,则可能压缩代码无效,或者会生成一张纯黑色的图片。<br />
<br />
如果要保存到本地,请参看:将PHP 将dataurl转成图片image方法总结&nbsp;
页: [1]
查看完整版本: Js利用Canvas实现图片压缩功能,多用于移动端处理图片上传问题