所有分类
  • 所有分类
  • 后端开发
Canvas 压缩图片教程:实战案例及注意事项

Canvas 压缩图片教程:实战案例及注意事项

这次给大家带怎么用canvas压缩图片?用canvas压缩图片的注意事项有哪些,下面就是实战案例,一起来看一下。将所获取的本地图片以base64格式输出三、压缩图片并输出经测试发现,通过Canvas压缩JPEG格式图片效果最佳,PNG压缩效

一、本地图片输入

首先,咱们得在网页上找张本地照片咋办嘞?这事儿简单!就在网页上弄个type=”file”的按钮,轻轻点一下就能在你电脑里一眼看到喜欢的图!这不就等于是给了你个篮子,让你把家里可爱的鸡蛋(图片)都扔进来,然后我们就可以开开心心地接住。

收到东西要好好看清楚免得出差错,比如有人想发照片结果选成文字文件。所以咱们要看好文件格式,像常见的jpg和png等规范一下。这就像买鸡蛋时挑选新鲜又干净、表面没损坏那样重要。


二、将本地图片转换成Base64格式

// JS
var chooseImg = document.getElementById("choose-img");
chooseImg.onchange = function(e){
    var file = this.files[0];
    // ……  (省略部分代码后续依次展示,下同)
};

看好要拼接的图有木有弄错没问题的话就给它换个形象——转换为Base64格式!这么做其实就是将图片转换为一串码字,方便网络传输。简单来说,就是让大图缩小点,带着更轻松。

三、在Canvas画布中绘制图片

搞定64位码图片之后,咱们要做的就是把这个图放到Canvas画布上去展示!Canvas这东西就是个大白板,随心所欲,随便搞创作,堆出各种各样漂亮的图案。首先,先找个和咱的图片尺寸差不多的Canvas画布。这样一来,图片就能直接铺满整个画布,看着特爽!

搞定画布,咱们开干!这个和纸上创作差不多,不过这次是用代码做出来的。说简单点就是先把想画的图用Base64编码传给Canvas,然后它自己就画出图来了!

// JS
var result = document.getElementById("result");    // 用于显示图片输出结果,或者错误提示
if(/image/.test(file.type)){     // 判断文件类型是否为图片
    // ……
}
else{
    result.innerHTML = '文件类型有误!';
}

Canvas 压缩图片教程:实战案例及注意事项

四、压缩图片并输出

搞定了,只要弄个图片处理下就好了,然后导出来。比调画布大小跟保存容易多了。Canvas里面压缩图片,我们可以JPEG或者PNG选一种,我试了,真的能省地方,还有变小。但是PNG有时候效果不好,甚至变得更大。

搞定图片压缩后就能直接上网看了,就像完成一幅画再拿给大家欣赏一样哦~

var img = new Image(),      // 创建图片对象,用于放置原始图片
    reader = new FileReader();
reader.readAsDataURL(file);    // 以base64格式读取并存入FileReader对象的result属性中
reader.onload = function(){
    img.src = this.result;   // 将图片base64字符串直接赋予Image对象的src中
    document.body.insertBefore(img,chooseImg);   // 将输出的图片插入到文件按钮之前
    img.onload = function(){
        // ……
    };
};

五、需要注意的小细节

别乱搞图片压缩注意两点就成:第一,画布大小一定得和原图对上号,不然画面看起来怪怪的;其次,就是压缩格式了。要是颜色很多就用JPEG,反之就选PNG!

六、实战案例分析

var canvas = document.createElement('canvas');
canvas.width = img.clientWidth;
canvas.height = img.clientHeight;
var context = canvas.getContext('2d');

别着急,咱们就看看几个实际例子,看看压缩前后有啥差别,你就能明白怎么用Canvas压缩图片,其实挺简单的!

七、总结与展望

看过文章和例子是不是觉得已经会在Canvas上压缩图片了?其实Canvas不仅能压缩图像,还能自由画图甚至制作小动画!而且听说未来可能还会有很多更酷炫的新功能诞生,真是让人心痒痒的想等着看!

context.drawImage(img,0,0,canvas.width,canvas.height);

原文链接:https://www.icz.com/technicalinformation/web/vue2/2024/07/20254.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?