convert to jpg before saving

This commit is contained in:
Samuel Newman
2026-02-26 11:07:36 +02:00
parent 90f1b46e3f
commit 0ba7b259d7
3 changed files with 18 additions and 21 deletions
+16 -17
View File
@@ -79,17 +79,29 @@ export async function shareImageModal({uri}: {uri: string}) {
return 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, { await Sharing.shareAsync(imagePath, {
mimeType: mimeFromExt(imagePath), mimeType: 'image/jpeg',
UTI: mimeFromExt(imagePath), UTI: 'image/jpeg',
}) })
} }
const ALBUM_NAME = 'Bluesky' const ALBUM_NAME = 'Bluesky'
export async function saveImageToMediaLibrary({uri}: {uri: string}) { 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 // save
try { try {
@@ -426,16 +438,3 @@ const MIME_TO_EXT: Record<string, string> = {
function extFromMime(mimeType?: string | null): string { function extFromMime(mimeType?: string | null): string {
return (mimeType && MIME_TO_EXT[mimeType]) || 'jpg' return (mimeType && MIME_TO_EXT[mimeType]) || 'jpg'
} }
const EXT_TO_MIME: Record<string, string> = {
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'
}
+1 -2
View File
@@ -64,8 +64,7 @@ export async function openCamera(): Promise<PickerImage> {
export async function openCropper(opts: OpenCropperOptions) { export async function openCropper(opts: OpenCropperOptions) {
const item = await ExpoImageCropTool.openCropperAsync({ const item = await ExpoImageCropTool.openCropperAsync({
...opts, ...opts,
// @ts-expect-error update @bsky.app/expo-image-crop-tool to pick up webp support format: 'jpeg',
format: 'webp',
}) })
return { return {
+1 -2
View File
@@ -37,8 +37,7 @@ export async function openCropper(opts: OpenCropperOptions) {
doneButtonText: t`Done`, doneButtonText: t`Done`,
cancelButtonText: t`Cancel`, cancelButtonText: t`Cancel`,
...opts, ...opts,
// @ts-expect-error update @bsky.app/expo-image-crop-tool to pick up webp support format: 'jpeg',
format: 'webp',
}) })
return { return {