compressImage static method

Future<XFile?> compressImage(
  1. XFile file, {
  2. int minWidth = 1080,
  3. int quality = 70,
})

Compress image

Implementation

static Future<XFile?> compressImage(
  XFile file, {
  int minWidth = 1080,
  int quality = 70,
}) async {
  XFile fileLocal = file;
  if (file.path.isNetworkImage()) {
    final HttpClient httpClient = HttpClient();
    try {
      final File imageFile = File(
          '${await getCacheDirectory()}/${DateTime.now().millisecondsSinceEpoch}.png');
      final HttpClientRequest request =
          await httpClient.getUrl(Uri.parse(file.path));
      final HttpClientResponse response = await request.close();
      if (response.statusCode == 200) {
        final Uint8List bytes =
            await consolidateHttpClientResponseBytes(response);
        await imageFile.writeAsBytes(bytes);
        fileLocal = XFile(imageFile.path);
      } else {}
    } catch (ex) {
      print(ex);
    } finally {
      httpClient.close();
    }
  }
  final Uint8List? result = await FlutterImageCompress.compressWithFile(
    fileLocal.path,
    quality: quality,
    format: CompressFormat.png,
    minWidth: minWidth,
  );
  if (result == null) {
    return null;
  }
  final String cacheDir = await getCacheDirectory();
  final XFile compressedFile = XFile.fromData(result,
      path: '$cacheDir/${DateTime.now().millisecondsSinceEpoch}.png');
  await compressedFile.saveTo(compressedFile.path);
  return compressedFile;
}