例如,我们有file.jpg,大小为5Mb。我们的目标是将其压缩到2Mb。 SDK中有souch方法:Bitmap.compress(Bitmap.CompressFormat格式,int quality,OutputStream流)。
压缩前是否有任何变量来计算目标质量值?
答案 0 :(得分:1)
您无法预测JPEG压缩的最终输出。
你唯一的选择就是以优化的方式执行一些暴力破解。
通常,JPEG以10:1的比例压缩位图。
因此,如果您的图像分辨率为4096 * 4096,则需要4096 * 4096 * 2个原始字节(因为使用RGB_565,因此需要2个),等于33554432个字节= 32MB原始字节。假设10:1压缩,则需要3.2MB。
但它大于2MB!所以你需要将质量提高到2 / 3.2 =62.5℅。所以首先尝试使用62℅作为质量参数。
现在将图像压缩为ByteArrayOutputStream
并检查字节数组的长度。如果数组的长度小于2 * 1024 * 1024 = 2097152,则没关系。否则你应该尝试降低质量,例如10℅到52℅,然后再试一次。
答案 1 :(得分:0)
根据this,质量是提示压缩机的int,0-100。 0表示压缩小尺寸,100表示压缩最大质量。但有些像PNG这样无损的格式会忽略这种质量设置。所以,我认为这取决于你的目标。如果您想获得最小尺寸的最高质量,那么您需要调整尺寸和尺寸。实现高质量。
希望,它可以帮助你。