compressImage method

Future<File> compressImage(
  1. File fileImage, {
  2. int expectedSize = 300000,
  3. String path = "Pictures",
})

300kb

Implementation

//todo better way
Future<File> compressImage(File fileImage,
    {int expectedSize = 300000, String path = "Pictures"}) async {
  final Directory extDir = await getApplicationDocumentsDirectory();
  final String dirPath = '${extDir.path}/$path';
  await Directory(dirPath).create(recursive: true);
  final String targetPath =
      '$dirPath/${DateTime.now().millisecondsSinceEpoch.toString()}_compress.jpg';

  var currentSize = await fileImage.length();
  File? resultFile;
  var quality = 80;

  while (currentSize > expectedSize) {
    if (resultFile != null) {
      resultFile.deleteSync();
      quality = quality - 10;
    }

    resultFile = await FlutterImageCompress.compressAndGetFile(
      fileImage.absolute.path,
      targetPath,
      quality: quality,
    );
    currentSize = await resultFile!.length();
  }
  if (resultFile == null) return fileImage;
  return resultFile;
}