diff --git a/web/apps/photos/src/services/exif.ts b/web/apps/photos/src/services/exif.ts index c606f72517..4023bc20fd 100644 --- a/web/apps/photos/src/services/exif.ts +++ b/web/apps/photos/src/services/exif.ts @@ -370,29 +370,14 @@ async function convertImageToDataURL(blob: Blob) { return dataURL; } -function dataURIToBlob(dataURI: string) { - // convert base64 to raw binary data held in a string - // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this - const byteString = atob(dataURI.split(",")[1]); - - // separate out the mime component - const mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0]; - - // write the bytes of the string to an ArrayBuffer - const ab = new ArrayBuffer(byteString.length); - - // create a view into the buffer - const ia = new Uint8Array(ab); - - // set the bytes of the buffer to the correct values - for (let i = 0; i < byteString.length; i++) { - ia[i] = byteString.charCodeAt(i); - } - - // write the ArrayBuffer to a blob, and you're done - const blob = new Blob([ab], { type: mimeString }); - return blob; -} +/** + * Convert a `data:` URI to a blob. + * + * Requires `connect-src data:` in the CSP (since it internally uses `fetch` to + * perform the conversion). + */ +const dataURIToBlob = (dataURI: string) => + fetch(dataURI).then((res) => res.blob()); function convertToExifDateFormat(date: Date) { return `${date.getFullYear()}:${