changeFormatAndCompressImage static method
Future<File?>
changeFormatAndCompressImage(
{ - required File image,
- String format = 'jpeg',
- required int? sizeLimit,
})
Implementation
static Future<File?> changeFormatAndCompressImage({
required File image,
String format = 'jpeg',
required int? sizeLimit,
}) async {
try {
Uint8List uint8list = await image.readAsBytes();
int imageSizeInKB =
uint8list.lengthInBytes ~/ 1024; // Calculate image size in KB
int quality = 99; // Default initial quality
//print('imageSizeInKB:<1> $imageSizeInKB');
if (sizeLimit != null && imageSizeInKB > sizeLimit) {
// --> Don't remove below method. [Purpose: set image in cache to reduce compressing time]
uint8list = await FlutterImageCompress.compressWithList(
uint8list,
quality: quality,
minHeight: 720,
minWidth: 1280,
format: getFormat(format) ?? CompressFormat.jpeg,
);
// --> send cache image to find the quality
quality = await getCompressQuality(
sizeLimit: sizeLimit,
tempImg: uint8list,
format: format,
);
// Compress the image until it reaches or is smaller than the limit
uint8list = await FlutterImageCompress.compressWithList(
uint8list,
quality: quality,
minHeight: 720,
minWidth: 1280,
format: getFormat(format) ?? CompressFormat.jpeg,
);
}
if (uint8list.isNotEmpty) {
File compressedImage =
File(image.path.replaceAll(RegExp(r'\.\w+$'), '.$format'));
await compressedImage.writeAsBytes(uint8list);
// imageSizeInKB =
// uint8list.lengthInBytes ~/ 1024; // Calculate image size in KB
// print('imageSizeInKB:<2> $imageSizeInKB');
// print('compressedImage: $compressedImage');
/* // -> Find file extension
String extension = compressedImage.path.split('.').last.toLowerCase();
print('New file extension: $extension');
*/
return compressedImage;
} else {
print('Compression failed');
return null;
}
} catch (e) {
print('Error: $e');
return null;
}
}