url转base64

需要满足跨域的条件下才能完成。

const urlToBase64 = (url) => {
  return new Promise((resolve, reject) => {
    const image = new Image();
    image.src = url;
    image.setAttribute("crossOrigin", "Anonymous");
    image.onload = function () {
      const canvas = document.createElement("canvas");
      canvas.width = this.naturalWidth;
      canvas.height = this.naturalHeight;
      canvas.getContext("2d").drawImage(image, 0, 0);
      resolve(canvas.toDataURL("image/png"));
    };
    image.onerror = function () {
      reject(new Error("urlToBase64 error"));
    };
  });
};

url转blob url

需要满足跨域的条件下才能完成。

const urlToBlob = (url) => {
  return new Promise((resolve, reject) => {
    const image = new Image();
    image.src = url;
    image.setAttribute("crossOrigin", "Anonymous");
    image.onload = function () {
      const canvas = document.createElement("canvas");
      canvas.width = this.naturalWidth;
      canvas.height = this.naturalHeight;
      canvas.getContext("2d").drawImage(image, 0, 0);
      canvas.toBlob((blob) => {
        resolve(URL.createObjectURL(blob));
      }, "image/png");
    };
    image.onerror = function () {
      reject(new Error("urlToBase64 error"));
    };
  });
};

base64转blob

const base64ToBlob = (base64) => {
  const byteCharacters = atob(base64).split(",");
  const byteString = byteCharacters[1];
  const mimeString = byteCharacters[0].split(":")[1].split(";")[0];
  const ab = new ArrayBuffer(byteString.length);
  const ia = new Uint8Array(ab);
  for (let i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
  }
  return new Blob([ab], { type: mimeString });
};

blob转base64

由于File是Blob的子类,所以所有Blob转换都适用于File类型。

const blobToBase64 = (blob) => {
  return new Promise((resolve, reject) => {
    const fileReader = new FileReader();
    fileReader.readAsDataURL(blob);
    fileReader.onload = function (e) {
      resolve(e.target.result);
    };
    fileReader.onerror = function () {
      reject(new Error("blobToBase64 error"));
    };
  });
};
上次更新:
贡献者: chenzilin