|
@@ -11,6 +11,23 @@ export function getRadianAngle(degreeValue: number) {
|
|
|
return (degreeValue * Math.PI) / 180
|
|
|
}
|
|
|
|
|
|
+export function getMimeType(fileName: string): string {
|
|
|
+ const extension = fileName.split('.').pop()?.toLowerCase()
|
|
|
+ switch (extension) {
|
|
|
+ case 'png':
|
|
|
+ return 'image/png'
|
|
|
+ case 'jpg':
|
|
|
+ case 'jpeg':
|
|
|
+ return 'image/jpeg'
|
|
|
+ case 'gif':
|
|
|
+ return 'image/gif'
|
|
|
+ case 'webp':
|
|
|
+ return 'image/webp'
|
|
|
+ default:
|
|
|
+ return 'image/jpeg'
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* Returns the new bounding area of a rotated rectangle.
|
|
|
*/
|
|
@@ -31,12 +48,14 @@ export function rotateSize(width: number, height: number, rotation: number) {
|
|
|
export default async function getCroppedImg(
|
|
|
imageSrc: string,
|
|
|
pixelCrop: { x: number; y: number; width: number; height: number },
|
|
|
+ fileName: string,
|
|
|
rotation = 0,
|
|
|
flip = { horizontal: false, vertical: false },
|
|
|
): Promise<Blob> {
|
|
|
const image = await createImage(imageSrc)
|
|
|
const canvas = document.createElement('canvas')
|
|
|
const ctx = canvas.getContext('2d')
|
|
|
+ const mimeType = getMimeType(fileName)
|
|
|
|
|
|
if (!ctx)
|
|
|
throw new Error('Could not create a canvas context')
|
|
@@ -93,6 +112,6 @@ export default async function getCroppedImg(
|
|
|
resolve(file)
|
|
|
else
|
|
|
reject(new Error('Could not create a blob'))
|
|
|
- }, 'image/jpeg')
|
|
|
+ }, mimeType)
|
|
|
})
|
|
|
}
|