从相机压缩位图

sga*_*man 5 memory gmail camera android bitmap

我需要通过网络发送从相机拍摄的图像。图像太大,无法创建使用 bitmap.compress() 所需的位图;看起来 Gmail 应用程序可以附加来自相机的图像,同时保持它们的大像素大小,但大大减小了它们的文件大小。

这行不通,因为我 getBitmap() 将返回一个大的 Image 来分配,我不想将其子采样到更小的尺寸。

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    getBitmap().compress(Bitmap.CompressFormat.JPEG, 70, baos);
Run Code Online (Sandbox Code Playgroud)

关于如何在不超过我的总记忆力的情况下做同样的事情的任何想法?

更新:

对于任何回到此线程的人,我都遵循了 Phil 的回答,并使用 Apache MultiPartEntity 轻松完成了工作。(它为您处理从磁盘到网络的流文件)http://hc.apache.org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntity.html

Phi*_*llo 2

由于您尚未明确定义“通过网络发送”的含义,因此很难给出具体建议。

但是,如果您想发送无损图像(或者比已经发生的损失更少的图像),我认为您无法压缩更多,因为 JPEG 已经压缩了。它使用有损压缩,因此如果您增加 JPEG 压缩,您会丢失细节(尽管您可能不会注意到,因为它基于频率而不是像素)

如果您只需要通过网络发送,那么为什么不直接打开一个InputStream,并将数据直接发送到网络呢?

希望这有帮助 - 如果您可以提供更多详细信息,我会更新答案。

最好的祝愿,

菲尔·莱洛