【问题标题】:android encode image with max size limitandroid编码具有最大尺寸限制的图像
【发布时间】:2011-02-14 14:39:39
【问题描述】:

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

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

你知道如何将文件大小限制为 300K 吗?也许解决方案是降低图像质量,但有时(当图像较小时)我可能不需要这个。谢谢

【问题讨论】:

    标签: android image size limit


    【解决方案1】:

    通过使用递减的“质量”值反复压缩,直到生成的 byte[] 长度

    【讨论】:

    • 文件质量与文件大小成正比吗?我的意思是,如果我获得质量 100 的文件大小和质量 99 的文件大小并看到文件大小的差异,我可以计算出正确的质量吗?
    • 是的,有一些差异。您可以从此处的图表中了解这种关系:upload.wikimedia.org/wikipedia/commons/c/ce/…
    【解决方案2】:

    快速的答案是使用试验和测试解决方案来找到一个压缩值,它可以让您获得接近小于 300k 的值。

    JPEG 的文件大小很大程度上取决于图像的细节,因此除非您的图片具有相同的细节(不是全黑图像等),否则最佳压缩等级会有所不同。

    也许使用二分搜索风格的算法来找到一个好的解决方案?从 50 开始,如果太大,则下降到 25,否则上升到 75。然后每当你在 270-300 之间时就停下来?

    【讨论】:

    • 文件质量与文件大小成正比吗?我的意思是,如果我获得质量 100 的文件大小和质量 99 的文件大小并看到文件大小的差异,我可以计算出正确的质量吗?
    • 嗯,我不是专家,但你可以这么认为,至少一开始是这样。一些实验将帮助您修改进展率。但 99 和 100 之间根本没有太大区别。
    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2019-12-12
    • 1970-01-01
    • 2016-11-03
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多