我需要将图像编码为JPEG,将最大文件zise编码为300 K并将其作为字节数组发送。我编码:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
image = baos.toByteArray();
你知道如何将文件大小限制为300K吗?也许解决方案是降低图像质量,但有时(当图像较小时)我可能不需要这个。感谢
答案 0 :(得分:4)
通过以'quality'降序值重复压缩,直到得到的byte [] length <= 300KB。此处没有快捷方式(AFAIK),但您可以仔细选择质量值,并将自己限制为最多4次按压。
答案 1 :(得分:2)
快速回答是使用试验和测试解决方案来查找压缩值,该值会使您的值接近300k。
JPEG的文件大小在很大程度上取决于图像的细节,因此,除非您的图片具有相同的细节(没有全黑图像等),否则最佳压缩等级将会不同。
也许使用二进制搜索样式算法来查找好的解决方案?从50开始,如果太大,则下降到25,否则上升到75.那么每当你说270-300之后就停止?