import * as ImageManipulator from 'expo-image-manipulator'; /** * Optimize image for avatar upload * - Resize to max 400x400 * - Compress to JPEG with 80% quality * - Returns optimized URI */ export async function optimizeAvatarImage(uri: string): Promise { try { const result = await ImageManipulator.manipulateAsync( uri, [ { resize: { width: 400, height: 400 } }, ], { compress: 0.8, format: ImageManipulator.SaveFormat.JPEG, } ); console.log('[ImageUtils] Optimized avatar:', { original: uri.substring(0, 50), optimized: result.uri.substring(0, 50), width: result.width, height: result.height, }); return result.uri; } catch (error) { console.error('[ImageUtils] Failed to optimize image:', error); // Return original if optimization fails return uri; } } /** * Optimize image for general upload with custom size */ export async function optimizeImage( uri: string, maxSize: number = 800, quality: number = 0.8 ): Promise { try { const result = await ImageManipulator.manipulateAsync( uri, [ { resize: { width: maxSize, height: maxSize } }, ], { compress: quality, format: ImageManipulator.SaveFormat.JPEG, } ); return result.uri; } catch (error) { console.error('[ImageUtils] Failed to optimize image:', error); return uri; } }