Android使用最大尺寸限制对图像进行编码

4

我需要将一张图片编码为JPEG格式,最大文件大小为300K,并将其作为字节数组发送。我进行了编码:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
image = baos.toByteArray();

您知道如何将文件大小限制在300K以内吗?也许降低图片质量是一种解决方案,但有时候(当图片较小的时候)我可能不需要这样做。谢谢。

2个回答

4

通过重复使用降低“质量”值进行压缩,直到生成的byte[]长度小于等于300KB。这没有捷径(据我所知),但您可以仔细选择质量值,并将自己限制在最多4次压缩。


文件质量与文件大小成正比吗?我的意思是,如果我获取质量100的文件大小和质量99的文件大小,并在文件大小上看到差异,那么我可以计算出正确的质量吗? - Buda Gavril
是的,有一些差异。您可以从这里的图表中了解到它们之间的关系:http://upload.wikimedia.org/wikipedia/commons/c/ce/Quality_comparison_jpg_vs_saveforweb.jpg - Reuben Scratton

2
快速的解决方案是使用试验和测试的方法,找到一个压缩值,使得文件大小接近于小于300k。
JPEG格式的文件大小高度依赖于图像的细节,因此除非你的图片具有相同的细节(没有全黑的图片等),否则最佳压缩比将不同。
也许可以使用二分查找算法来寻找一个好的解决方案?从50开始,如果太大,则降至25,否则升至75。然后当你在270-300之间时停止即可。

文件质量与文件大小成正比吗?我的意思是,如果我获取质量100的文件大小和质量99的文件大小,并在文件大小上看到差异,那么我可以计算出正确的质量吗? - Buda Gavril
嗯,我不是专家,但你可以初步假设。一些实验将帮助你修改进展速率。但99和100之间几乎没有什么区别。 - Kurru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接