changeFormatAndCompressImage static method

Future<File?> changeFormatAndCompressImage({
  1. required File image,
  2. String format = 'jpeg',
  3. 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;
  }
}