如何在Android中以全分辨率保存照片?

时间:2014-11-29 08:16:19

标签: java android camera

我制作了一款使用相机捕捉图像的应用。图像以Bitmap的形式传回我的应用程序。我想知道如何修改我的代码以将Bitmap保存为JPEG格式的全分辨率?

FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();

我认为Bitmap被压缩成更小的尺寸!

1 个答案:

答案 0 :(得分:2)

压缩是指减少保存图像所需的物理磁盘空间。它并不自动意味着图像质量或分辨率也会降低。

JPEG是一组(大部分)属于lossy compression algorithms的文件格式的一部分。换句话说,牺牲一些较小的图像细节和质量来减少图像的文件大小,但它仍然不会降低图像的分辨率。

如果您想缩小图片的文件大小,但又不想放弃任何图像质量,则需要使用支持lossless compression的文件格式。例如,您可以使用Bitmap.CompressFormat.PNG

WEBP支持有损和无损压缩(甚至比文件大小的PNG和JPG小)。但是,仅在API级别14中添加了对WEBP的支持,因此可能存在一些向后兼容性问题。如果可能,请使用WEBP,否则请使用PNG(如果您关心图像质量)。


在任何情况下,让我们看一下compress()方法:

public boolean compress (Bitmap.CompressFormat format, int quality, OutputStream stream)

如您所见,您可以选择CompressFormat,传递OutputStream并选择质量。您传入的数字质量可以介于0到100之间,它决定您是压缩有损还是无损。由于你传入100,无论你选择哪个CompressFormat,压缩都将是无损的!

暂且不说:由于PNG仅支持无损压缩,因此它将完全忽略质量参数,并始终保存图像而不降低其质量!