开箱即用,记得异步调用,方法如下:
export const compressImage = async (image: any, size: number) => {
// 使用canvas压缩图片
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
const img = new Image();
img.src = URL.createObjectURL(image);
return new Promise((resolve, reject) => {
img.onload = async () => {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
canvas.toBlob(
(blob) => {
URL.revokeObjectURL(img.src);
const compressedFile = new File([blob], image.name, {
type: image.type,
lastModified: Date.now(),
});
console.log("compressedFile", compressedFile);
// 返回压缩后的文件
resolve(compressedFile);
},
image.type,
size,
); // size为压缩质量
};
img.onerror = () => {
reject(new Error("图像加载失败"));
};
});
};
使用Promise包装,保证了数据正确返回