/**
 * 图片url转file文件
 * */
function imgUrlToFile(url) {
  var img = url; //这里是淘宝上随便找的一张图片
  var imgRes;
  // getBase64(img, (dataURL) => {
  //   imgRes = dataURLtoFile(dataURL,img);
  //   console.log(imgRes)
  //   callback(imgRes)
  // });
  return imgUrlToBase64(img).then(function (dataURL) {
    // @ts-ignore
    imgRes = dataURLtoFile(dataURL, img);
    return imgRes;
  }).catch(function (error) {
    return error;
  });
}
/**
 * 图片url转base64位
 * */
function imgUrlToBase64(url) {
  return new Promise(function (resolve, reject) {
    if (!url) {
      // reject(new Error('转换错误：未传入url'));
      reject('转换错误：未传入url');
    }
    var image = new Image();
    image.onload = function () {
      var canvas = document.createElement('canvas');
      canvas.width = image.width; // this.naturalWidth;
      canvas.height = image.height; // this.naturalHeight;
      // 将图片插入画布并开始绘制
      // @ts-ignore
      canvas.getContext('2d').drawImage(image, 0, 0, canvas.width, canvas.height);
      // result
      var result = canvas.toDataURL();
      // console.log('result', result)
      resolve(result);
    };
    // CORS 策略，会存在跨域问题https://stackoverflow.com/questions/20424279/canvas-todataurl-securityerror
    image.setAttribute("crossOrigin", 'Anonymous');
    image.src = url;
    // 图片加载失败的错误处理
    image.onerror = function (err) {
      reject(err);
    };
  });
}

/**
 * base64转file文件
 * */
function dataURLtoFile(dataurl, filename) {
  if (!dataurl) return undefined;
  //将base64转换为文件，dataurl为base64字符串，filename为文件名（必须带后缀名，如.jpg,.png）
  var arr = dataurl.split(","),
    // @ts-ignore
    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 File([u8arr], filename, {
    type: mime
  });
}

/**
 * file文件转base64位
 * */
var fileToBase64 = function fileToBase64(file) {
  return new Promise(function (resolve, reject) {
    if (!file || !(file instanceof File)) {
      // reject(new Error("转换错误：传入非File"));
      reject("转换错误：传入非File");
    }
    // 创建一个新的 FileReader 对象
    var reader = new FileReader();
    // 读取 File 对象
    reader.readAsDataURL(file);
    // 加载完成后
    reader.onload = function () {
      // 将读取的数据转换为 base64 编码的字符串
      // const base64String = reader.result.split(",")[1];
      var base64String = reader.result;
      // 解析为 Promise 对象，并返回 base64 编码的字符串
      resolve(base64String);
    };

    // 加载失败时
    reader.onerror = function () {
      reject(new Error("Failed to load file"));
    };
  });
};
export { imgUrlToFile, dataURLtoFile, imgUrlToBase64, fileToBase64 };