Single computer call for compression
This commit is contained in:
@@ -46,14 +46,13 @@ class FaceThumbnailGenerator extends SuperIsolate {
|
||||
'faceBoxesList': faceBoxesJson,
|
||||
},
|
||||
).then((value) => value.cast<Uint8List>());
|
||||
final compressedFaces = <Future<Uint8List>>[];
|
||||
for (final face in faces) {
|
||||
final compressedFace = _computer.compute<Map, Uint8List>(
|
||||
compressFaceThumbnail,
|
||||
param: {'pngBytes': face},
|
||||
);
|
||||
compressedFaces.add(compressedFace);
|
||||
}
|
||||
return await Future.wait(compressedFaces);
|
||||
final compressedFaces = await _computer.compute<Map, List<Uint8List>>(
|
||||
compressFaceThumbnails,
|
||||
param: {'listPngBytes': faces},
|
||||
);
|
||||
_logger.fine(
|
||||
"Compressed face thumbnails from sizes ${faces.map((e) => e.length / 1024).toList()} to ${compressedFaces.map((e) => e.length / 1024).toList()} kilobytes",
|
||||
);
|
||||
return compressedFaces;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -543,30 +543,28 @@ Future<Uint8List> _cropAndEncodeCanvas(
|
||||
return await _encodeImageToPng(croppedImage);
|
||||
}
|
||||
|
||||
Future<Uint8List> compressFaceThumbnail(Map args) async {
|
||||
final pngBytes = args['pngBytes'] as Uint8List;
|
||||
Future<List<Uint8List>> compressFaceThumbnails(Map args) async {
|
||||
final listPngBytes = args['listPngBytes'] as List<Uint8List>;
|
||||
final List<Future<Uint8List>> compressedBytesList = [];
|
||||
try {
|
||||
final compressedBytes = await FlutterImageCompress.compressWithList(
|
||||
pngBytes,
|
||||
quality: _faceThumbnailCompressionQuality,
|
||||
format: CompressFormat.jpeg,
|
||||
minWidth: _faceThumbnailMinDimension,
|
||||
minHeight: _faceThumbnailMinDimension,
|
||||
);
|
||||
|
||||
_logger.info(
|
||||
'Face thumbnail compressed from ${pngBytes.length} bytes to ${compressedBytes.length} bytes '
|
||||
'(${((1 - compressedBytes.length / pngBytes.length) * 100).toStringAsFixed(1)}% reduction)',
|
||||
);
|
||||
|
||||
return compressedBytes;
|
||||
for (final pngBytes in listPngBytes) {
|
||||
final compressedBytes = FlutterImageCompress.compressWithList(
|
||||
pngBytes,
|
||||
quality: _faceThumbnailCompressionQuality,
|
||||
format: CompressFormat.jpeg,
|
||||
minWidth: _faceThumbnailMinDimension,
|
||||
minHeight: _faceThumbnailMinDimension,
|
||||
);
|
||||
compressedBytesList.add(compressedBytes);
|
||||
}
|
||||
return await Future.wait(compressedBytesList);
|
||||
} catch (e, s) {
|
||||
_logger.warning(
|
||||
'Failed to compress face thumbnail, using original. Size: ${pngBytes.length} bytes',
|
||||
'Failed to compress face thumbnail, using original. Size: ${listPngBytes.map((e) => e.length).toList()} bytes',
|
||||
e,
|
||||
s,
|
||||
);
|
||||
return pngBytes;
|
||||
return listPngBytes;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user