想要提供一流的用户体验,同时又不牺牲图片的质量?传统的图片上传过程中,用户常常因为图片大小限制而感到沮丧,不得不手动调整图片尺寸,这无疑增加了用户的操作负担,尤其是对不太懂如何调整图片尺寸的用户来说,用户体验非常不好。
话不多说,压缩方法封装如下:
/**
* 图片压缩
* @param {string} url - 图片地址*
* @param {object} optoion - 配置项
*/
function compressImg(url, optoion={
maxWidth:1000, //最大宽度 px
maxHeight: 1000,//最大高度 px
quality: 0.8 //压缩质量 0-1
}) {
return new Promise(function (resolve, reject) {
try {
let img = new Image();
img.src = URL.createObjectURL(image);
// 缩放图片需要的canvas
let canvas = document.createElement(\\\'canvas\\\');
let context = canvas.getContext(\\\'2d\\\');
// base64地址图片加载完毕后
img.onload = function () {
// 图片原始尺寸
let originWidth = this.width;
let originHeight = this.height;
// 最大尺寸限制
let maxWidth = optoion.maxWidth,
maxHeight = optoion.maxHeight;
// 目标尺寸
let targetWidth = originWidth,
targetHeight = originHeight;
// 图片尺寸超过500x1000的限制
if (originWidth > maxWidth || originHeight > maxHeight) {
if (originWidth / originHeight > maxWidth / maxHeight) {
// 更宽,按照宽度限定尺寸
targetWidth = maxWidth;
targetHeight = Math.round(maxWidth * (originHeight / originWidth));
} else {
targetHeight = maxHeight;
targetWidth = Math.round(maxHeight * (originWidth / originHeight));
}
}
// canvas对图片进行缩放
canvas.width = targetWidth;
canvas.height = targetHeight;
// 清除画布
context.clearRect(0, 0, targetWidth, targetHeight);
// 图片压缩
context.drawImage(img, 0, 0, targetWidth, targetHeight);
// canvas转为blob
canvas.toBlob(function (blob) {
let files = new File([blob], image.name, { type: image.type || \\\'image/png\\\' });
resolve(files);
}, image.type || \\\'image/png\\\', option.quality);
}
} catch (e) {
return reject({
code: 1,
msg: \\\'图片压缩出错了!\\\'
});
}
});
}
使用方式如下:
//上传图片最大宽度500px, 最大高度500px,压缩质量0.8
const newImg = await obj.compressImg(imgUrl, {
maxWidth: 500,
maxHeight: 500,
quality: 0.8
});
让我们一起迈向更加智能、便捷的图片上传,让用户享受无缝、愉悦的上传体验。?? 现在就开始优化你的图片上传流程吧!
原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49857.html