compressImageToJpg function
Implementation
Future<File?> compressImageToJpg({
required File inputFile,
int? width,
int? height,
File? outputFile,
int quality = 100,
}) async {
// 异步读取文件字节
final imageBytes = await inputFile.readAsBytes();
// 在isolate中执行图像解码和调整大小
final resized = await compute(
_decodeAndResize,
_ResizeParams(
imageBytes: imageBytes,
width: width,
height: height,
));
if (resized == null) return null;
// 在isolate中执行JPEG编码
final jpegData = await compute(
_encodeJpeg,
_EncodeParams(
image: resized,
quality: quality,
));
outputFile ??= File(
"${getDirname(inputFile.path)}/${getBasenameWithoutExtension(inputFile.path)}_compressed.jpg");
// 异步写入文件
final compressedFile = await outputFile.writeAsBytes(jpegData);
logDebug('compressed: ${compressedFile.path} '
'width: ${resized.width} height: ${resized.height} '
'before: ${inputFile.lengthSync()} '
'after: ${compressedFile.lengthSync()}');
return compressedFile;
}