/**
 * 图片压缩
 * imgSrc 地址
 * scale 压缩质量 0-1
 * type 文件类型
 */
export async function H5compressImg(
  imgSrc,
  scale = 0.75,
  maxWidth = 800,
  maxHeight = 800
) {
  return new Promise((resolve, reject) => {
    var img = new Image();
    img.src = imgSrc;
    img.onload = () => {
      // 计算按比例压缩后的尺寸
      let w = img.width;
      let h = img.height;
      // 如果图片宽度或高度超过最大限制，则按比例缩放
      if (w > maxWidth) {
        h = (maxWidth / w) * h;
        w = maxWidth;
      }
      if (h > maxHeight) {
        w = (maxHeight / h) * w;
        h = maxHeight;
      }
      var canvas = document.createElement("canvas");
      var ctx = canvas.getContext("2d");
      // 设置canvas的宽高
      canvas.width = w;
      canvas.height = h;
      // 将图片绘制到canvas上
      ctx.drawImage(img, 0, 0, w, h);
      // 设置输出格式为jpeg，质量为scale
      var base64;
      try {
        base64 = canvas.toDataURL("image/jpeg", scale);
      } catch (e) {
        // 如果浏览器不支持jpeg，或者有跨域问题，则使用png
        base64 = canvas.toDataURL("image/png", scale);
      }
      canvas = null;
      resolve(base64);
    };
    img.onerror = (e) => {
      reject(e);
    };
  });
}
/**base转Blob */
export function base64ToBlob(base64) {
  var arr = base64.split(","),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
    type: mime,
  });
}
/**获取base64的文件大小 */
export function getBase64Size(base64Str) {
  let size = 0;
  if (base64Str) {
    // 获取base64图片byte大小
    const equalIndex = base64Str.indexOf("="); // 获取=号下标
    if (equalIndex > 0) {
      const str = base64Str.substring(0, equalIndex); // 去除=号
      const strLength = str.length;
      const fileLength = strLength - (strLength / 8) * 2; // 真实的图片byte大小
      size = Math.floor(fileLength); // 向下取整
    } else {
      const strLength = base64Str.length;
      const fileLength = strLength - (strLength / 8) * 2;
      size = Math.floor(fileLength); // 向下取整
    }
  } else {
    size = null;
  }
  return size;
}
