canvas图片压缩
canvas生成图片的方法,我们通过官方教程都能简单的生成,但是我遇到的情况是,在生成的过程中,图片有点大,其实图片大也没什么问题,但是要知道图片大的话上传是比较消耗时间和流量的,所以对于大尺寸的图片还是要进行下压缩比较好
正常生成图片我们可以配置参数
canvas.toDataURL("image/jpeg", quality);
image/jpeg
可以替换为 image/png 或者 image/webp
不过 image/webp 格式的话ios好像默认情况下是不支持的
quality 是一个0-1的值,具体值为多少可以根据情况来设定
有了上面的方法我们就可以根据这个思路进行压缩,方法如下
/**
* @param base64 为64位编码的图片数据
* @param w 要压缩的图片的宽度
* @param calback 回掉函数
*/
function dealImage (base64, w, callback) {
var newImage = new Image();
var quality = 1; //压缩系数0-1之间
newImage.src = base64;
newImage.setAttribute("crossOrigin", 'Anonymous'); // url为外域时需要
var imgWidth, imgHeight;
newImage.onload = function () {
imgWidth = this.width;
imgHeight = this.height;
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
if (Math.max(imgWidth, imgHeight) > w) {
if (imgWidth > imgHeight) {
canvas.width = w;
canvas.height = w * imgHeight / imgWidth;
} else {
canvas.height = w;
canvas.width = w * imgWidth / imgHeight;
}
} else {
canvas.width = imgWidth;
canvas.height = imgHeight;
quality = 1;
}
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
var base64 = canvas.toDataURL("image/jpeg", quality); //压缩语句
callback(base64);
}
}
版权声明
由 durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 博客( https://www.gowhich.com ),版权所有,侵权必究。
版权声明
由 durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 Gowhich博客( https://www.gowhich.com ),版权所有,侵权必究。