diff --git a/src/lib/media/manip.ts b/src/lib/media/manip.ts index db192be037..91545f675a 100644 --- a/src/lib/media/manip.ts +++ b/src/lib/media/manip.ts @@ -79,17 +79,29 @@ export async function shareImageModal({uri}: {uri: string}) { return } - const imagePath = await downloadImage(uri, String(uuid.v4()), 15e3) + const downloadedPath = await downloadImage(uri, String(uuid.v4()), 15e3) + const {uri: jpegUri} = await manipulateAsync(downloadedPath, [], { + format: SaveFormat.JPEG, + compress: 1.0, + }) + void safeDeleteAsync(downloadedPath) + const imagePath = await moveToPermanentPath(jpegUri, '.jpg') await Sharing.shareAsync(imagePath, { - mimeType: mimeFromExt(imagePath), - UTI: mimeFromExt(imagePath), + mimeType: 'image/jpeg', + UTI: 'image/jpeg', }) } const ALBUM_NAME = 'Bluesky' export async function saveImageToMediaLibrary({uri}: {uri: string}) { - const imagePath = await downloadImage(uri, String(uuid.v4()), 15e3) + const downloadedPath = await downloadImage(uri, String(uuid.v4()), 15e3) + const {uri: jpegUri} = await manipulateAsync(downloadedPath, [], { + format: SaveFormat.JPEG, + compress: 1.0, + }) + void safeDeleteAsync(downloadedPath) + const imagePath = await moveToPermanentPath(jpegUri, '.jpg') // save try { @@ -426,16 +438,3 @@ const MIME_TO_EXT: Record = { function extFromMime(mimeType?: string | null): string { return (mimeType && MIME_TO_EXT[mimeType]) || 'jpg' } - -const EXT_TO_MIME: Record = { - jpg: 'image/jpeg', - jpeg: 'image/jpeg', - webp: 'image/webp', - png: 'image/png', - gif: 'image/gif', -} - -function mimeFromExt(path: string): string { - const ext = path.split('.').pop() - return (ext && EXT_TO_MIME[ext]) || 'image/jpeg' -} diff --git a/src/lib/media/picker.e2e.tsx b/src/lib/media/picker.e2e.tsx index 4f8c3a8238..f01217d2a5 100644 --- a/src/lib/media/picker.e2e.tsx +++ b/src/lib/media/picker.e2e.tsx @@ -64,8 +64,7 @@ export async function openCamera(): Promise { export async function openCropper(opts: OpenCropperOptions) { const item = await ExpoImageCropTool.openCropperAsync({ ...opts, - // @ts-expect-error update @bsky.app/expo-image-crop-tool to pick up webp support - format: 'webp', + format: 'jpeg', }) return { diff --git a/src/lib/media/picker.tsx b/src/lib/media/picker.tsx index b010674679..c9a52b8bad 100644 --- a/src/lib/media/picker.tsx +++ b/src/lib/media/picker.tsx @@ -37,8 +37,7 @@ export async function openCropper(opts: OpenCropperOptions) { doneButtonText: t`Done`, cancelButtonText: t`Cancel`, ...opts, - // @ts-expect-error update @bsky.app/expo-image-crop-tool to pick up webp support - format: 'webp', + format: 'jpeg', }) return {