const IMAGE_PROSESSOR = {
IMAGE_PNG: 'image/png',
IMAGE_JPEG: 'image/jpeg',
compressAndConvertTo(srcPath, fileName, fileTyp = IMAGE_PROSESSOR.IMAGE_PNG, dw = 200, dh = dw) {
return new Promise((resolve, reject) => {
try {
const img = new Image(dw, dh);
img.onload = function () {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = dw;
canvas.height = dh;
let scale = Math.max(dw / img.naturalWidth, dh / img.naturalHeight);
let [width, height] = [canvas.width / scale, canvas.height / scale];
let [sx, sy] = [(img.naturalWidth - width) / 2, (img.naturalHeight - height) / 2];
ctx.drawImage(img, sx, sy, width, height, 0, 0, canvas.width, canvas.height);
resolve(IMAGE_PROSESSOR.canvasToFile(canvas, fileName, fileTyp));
}
img.src = srcPath;
} catch (error) {
reject(error);
}
});
},
canvasToFile(canvas, fileName, fileTyp) {
return fetch(canvas.toDataURL(fileTyp))
.then(response => response.blob())
.then(blob => new File([blob], fileName, { type: fileTyp }));
}
};
浏览器原生js实现图片裁切 压缩 格式转换
于 2024-05-01 11:48:59 首次发布
![](https://img-home.csdnimg.cn/images/20240611030827.png)