import 'dart:io'; import 'dart:typed_data'; import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:path_provider/path_provider.dart'; import 'package:path/path.dart' as path; import 'package:logger/logger.dart'; final logger = Logger(); Future compressImageToUnder100KB(File file) async { int quality = 40; Uint8List? result; const int maxWidth = 800; const int maxHeight = 800; while (quality >= 10) { result = await FlutterImageCompress.compressWithFile( file.absolute.path, quality: quality, minWidth: maxWidth, minHeight: maxHeight, format: CompressFormat.jpeg, ); if (result != null) { logger.i('Quality: $quality, Size: ${(result.lengthInBytes / 1024).toStringAsFixed(2)} KB'); if (result.lengthInBytes <= 100 * 1024) { return result; } } quality -= 10; } return result; } Future saveCompressedImageToFile(Uint8List bytes) async { final tempDir = await getTemporaryDirectory(); final filePath = path.join( tempDir.path, 'compressed_${DateTime.now().millisecondsSinceEpoch}.jpg', ); final file = File(filePath); return await file.writeAsBytes(bytes); }