gpt4 book ai didi

java - 将 JPEG 图像压缩到特定质量级别,而不使用 Bitmap#compress() 方法

转载 作者:行者123 更新时间:2023-12-02 09:51:32 24 4
gpt4 key购买 nike

我想将位图(JPEG 图像)压缩到 64 质量,结果存储在字节数组中。以前我可以使用 Bitmap#compress() 方法实现此目的:

public static byte[] compressJPEG(Bitmap bmp, int quality) {
if (quality <= 0)
return new byte[0];

byte[] array = new byte[0];
try {
ByteArrayOutputStream bmpStream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, quality, bmpStream);
array = bmpStream.toByteArray();
bmpStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return array;
}

但是当我在不同的设备上运行它时,结果字节数组(具有相同的输入图像文件)是不同的。 (可能是因为它内部使用了nativeCompress())

检查后,我发现 Huffman 表、SOS 和图像数据部分有所不同,请参阅: Diff check between 2 image photos

那么如何在不使用 Bitmap#compress() 方法的情况下将 JPEG 图像压缩到特定的质量级别?因为我真的希望结果字节数组在结构上相似。

最佳答案

JPEG 中没有“质量级别”的概念。它是一些编码器用来选择量化表的简写。 JPEG 压缩中有许多变量,包括扫描、样本、哈夫曼表选择和量化表选择的类型和分割。如果您使用的编码器中的任何一个不同,您将得到不同的输出。这是野兽的本性。

关于java - 将 JPEG 图像压缩到特定质量级别,而不使用 Bitmap#compress() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56292677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com