compress.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { RcFile } from 'antd/lib/upload';
  2. /** 判断是否是图片 */
  3. const checkIsImage = (name: string): boolean => {
  4. let imgType = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff']
  5. if (name && name?.indexOf('/') !== -1) {
  6. let type = name?.split('/')[1]
  7. if (imgType?.indexOf(type) !== -1) {
  8. return true
  9. }
  10. } else {
  11. return false
  12. }
  13. return true
  14. }
  15. /** base64转File */
  16. export const dataURLtoFile = (dataurl: any, filename: any) => {
  17. let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
  18. bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  19. while (n--) {
  20. u8arr[n] = bstr.charCodeAt(n);
  21. }
  22. return new File([u8arr], filename, { type: mime });
  23. }
  24. /* 获取图片宽高*/
  25. export const imgMessage = (imgs: string[]): Promise<{ width: number, height: number }[]> => {
  26. return new Promise((resolve, reject) => {
  27. if (imgs.length > 0) {
  28. let imgsAll = imgs?.map((item: string) => {
  29. return new Promise((resolve) => {
  30. let img: any = new Image();
  31. img.onload = function (e: any) {
  32. resolve({ width: this.width, height: this.height })
  33. }
  34. img.src = item;
  35. })
  36. })
  37. Promise.all(imgsAll).then((res: any) => {
  38. resolve(res)
  39. })
  40. } else {
  41. reject([])
  42. }
  43. })
  44. };
  45. /* 获取视频宽高*/
  46. export const videoMessage = (videos: RcFile[]): Promise<{ width: number, height: number, videoLength: number }[]> => {
  47. return new Promise((resolve, reject) => {
  48. if (videos.length > 0) {
  49. let videoAll = videos?.map((item: RcFile) => {
  50. return new Promise((resolve) => {
  51. var videoUrl = URL.createObjectURL(item);
  52. var videoObj = document.createElement("video");
  53. videoObj.onloadedmetadata = function (evt) {
  54. URL.revokeObjectURL(videoUrl);
  55. // 执行上传的方法,获取外网路径,上传进度等
  56. resolve({ width: videoObj.videoWidth, height: videoObj.videoHeight, videoLength: videoObj.duration })
  57. };
  58. videoObj.src = videoUrl;
  59. videoObj.load();
  60. })
  61. })
  62. Promise.all(videoAll).then((res: any) => {
  63. resolve(res)
  64. })
  65. } else {
  66. reject([])
  67. }
  68. })
  69. };
  70. export const videoUrlMessage = (videoUrl: string): Promise<{ width: number, height: number, videoLength: number }> => {
  71. return new Promise((resolve, reject) => {
  72. if (videoUrl) {
  73. var videoObj = document.createElement("video");
  74. videoObj.onloadedmetadata = function (evt) {
  75. URL.revokeObjectURL(videoUrl);
  76. // 执行上传的方法,获取外网路径,上传进度等
  77. resolve({ width: videoObj.videoWidth, height: videoObj.videoHeight, videoLength: videoObj.duration })
  78. };
  79. videoObj.src = videoUrl;
  80. videoObj.load();
  81. } else {
  82. reject()
  83. }
  84. })
  85. }
  86. /**
  87. * blob 转 base64
  88. * @param blob 图片2进制流
  89. */
  90. export const blobToBase64 = (blob: Blob) => {
  91. return new Promise((resolve, reject) => {
  92. const fileReader = new FileReader();
  93. fileReader.onload = (e: any) => {
  94. resolve(e.target.result);
  95. };
  96. // readAsDataURL
  97. fileReader.readAsDataURL(blob);
  98. fileReader.onerror = () => {
  99. reject(new Error('blobToBase64 error'));
  100. };
  101. });
  102. }