在上传图片时限制图片大小往往会影响用户体验,因此我们可以对上传的图片进行压缩,一方面时减少服务器资源占用,另一方面是前端渲染图片时也会更快
原文地址
Canvas压缩 
- canvas压缩
 
js
const compressImage = (file, maxWidth, maxHeight, quality) => {
  return new Promise((resolve, reject) => {
   //创建图片,用于绘制canvas
    const image = new Image();
    const canvas = document.createElement("canvas");
    const ctx = canvas.getContext("2d");
   //使得image.src指向file文件
    image.src = URL.createObjectURL(file);
    image.onload = () => {
      let newWidth = image.width;
      let newHeight = image.height;
   //按宽/高中最大的一边按比例缩放
      if (image.width > maxWidth || image.height > maxHeight) {
        if (image.width / image.height > maxWidth / maxHeight) {
          newWidth = maxWidth;
          newHeight = (image.height / image.width) * maxWidth;
        } else {
          newWidth = (image.width / image.height) * maxHeight;
          newHeight = maxHeight;
        }
      }
    //按照图片,绘制canvas
      canvas.width = newWidth;
      canvas.height = newHeight;
      ctx.drawImage(image, 0, 0, newWidth, newHeight);
    //将canvas转为blob类型,传入图片质量(在 0 与 1 之间)
      canvas.toBlob(
        (blob) => {
          resolve(blob);
        },
        file.type,
        quality,
      );
    };
    image.onerror = (error) => {
      reject(error);
    };
  });
};- 使用如下
 
js
        // 压缩图片
        const compressedBlob = await compressImage(file.raw, 1600, 1600, 0.8);
        console.log({
          raw: new File([compressedBlob], file.raw.name, {
            type: file.raw.type,
          }),
        })其他方式 
- 微信小程序中有一些写好的api可以用
 
- chooseMedia['compressed']
 - wx.compressImage() 压缩效果均不错,且显示清晰