Untitled
unknown
plain_text
2 years ago
1.5 kB
11
Indexable
Stream<Uint8List> _compressImages(
List<File> files, {
int initialQuality = 95,
int minQuality = 50,
int maxIterations = 10,
int qualityDecrementStep = 5,
double targetSizeInKB = 150,
}) async* {
assert(initialQuality <= 100 && initialQuality >= minQuality,
'Initial quality must be between minQuality and 100.');
assert(minQuality >= 0 && minQuality <= 100,
'MinQuality must be between 0 and 100.');
assert(maxIterations > 0, 'MaxIterations must be greater than 0.');
assert(qualityDecrementStep > 0, 'QualityDecrementStep must be positive.');
assert(targetSizeInKB > 0, 'TargetSizeInKB must be positive.');
for (File file in files) {
double originalSizeKB = file.lengthSync() / 1024;
if (originalSizeKB <= targetSizeInKB) {
yield await file.readAsBytes();
continue;
}
int quality = initialQuality;
int iteration = 0;
Uint8List? result;
while (iteration < maxIterations && quality >= minQuality) {
result = await FlutterImageCompress.compressWithFile(
file.absolute.path,
minWidth: 1080,
minHeight: 720,
quality: quality,
);
if (result != null && result.length / 1024 <= targetSizeInKB) {
break;
}
quality -= qualityDecrementStep;
iteration++;
}
if (result != null) {
yield result;
}
}
}Editor is loading...
Leave a Comment