颤振压缩图像分辨率较差



我使用flutter_image_compress来压缩图像。我写了一个方法,它接受一个fileSize,并试图将图像缩小到具有最佳质量的fileSize。方法如下:

Future<File?> compressImage(File image, {int kb = 50}) async {
var inPath = image.absolute.path;
int q = 95;
File? result = image;
while (q >= 1 && result != null && (await result.length() > kb * 1024)) {
result = await FlutterImageCompress.compressAndGetFile(
inPath,
outPath,
quality: q,
minHeight: 1500,
minWidth: 1500,
);
q = q ~/ 2;
}
return result;
}

基本上这个方法检查图像是否已经小于给定的大小,如果不是,压缩图像。对于每一次运行,质量降低50%,直到它为1。这个方法是有效的,但是在我的iPhone和Android手机上,相同大小的图像质量非常不同。

在我的iPhone (iPhone 11, iOS 15.5)上,我可以将图像压缩到50kb,质量很完美,我没有看到任何差异。在我的安卓手机上(三星Galaxy A13,安卓12),如果我把图像压缩到50kb,质量非常差。

Android的例子:初始长度:1213154压缩质量:47压缩长度:89085

iOS的例子:初始长度:1409313压缩质量:2压缩长度:76801

所以,在iOS示例中,我设置必须使用2的质量将其降低到约76kb,结果是完美的。在Android上,我用了47的画质把它压缩到89kb,画质很差。

是否有一种方法可以在不损失图像质量的情况下尽可能地减小尺寸?我还遗漏了什么因素吗?这对我来说真的没有意义,因为iOS上的图像要好得多,即使它被压缩到一个更小的文件大小。

这个包似乎提供了用Kotlin (Android)和Swift (iOS)编写的本地代码。所以这两种实现之间可能存在差异,甚至是Android代码中的错误导致更差的质量。

你可以在他们的github页面上提出问题。

最新更新