dataURLtoFile.ts 780 B

123456789101112131415161718192021222324252627
  1. import { EImageType } from '@models';
  2. import { checkImageType } from '@utils';
  3. /**
  4. * 将一个dataURL字符串转变为一个File(Blob)对象
  5. * 转变时可以确定File对象的类型
  6. *
  7. * @param {string} dataURL
  8. * @param {string=} type - 确定转换后的图片类型,选项有 "image/png", "image/jpeg", "image/gif"
  9. * @returns {Promise(Blob)}
  10. */
  11. export default async function dataURLtoFile(dataURL: string, type: EImageType): Promise<Blob> {
  12. const arr = dataURL.split(',');
  13. let mime = arr[0].match(/:(.*?);/)[1];
  14. const bstr = atob(arr[1]);
  15. let n = bstr.length;
  16. const u8arr = new Uint8Array(n);
  17. while (n--) {
  18. u8arr[n] = bstr.charCodeAt(n);
  19. }
  20. if (checkImageType(type)) {
  21. mime = type;
  22. }
  23. return new Blob([u8arr], {
  24. type: mime,
  25. });
  26. };