我制作了一款使用相机捕捉图像的应用。图像以Bitmap
的形式传回我的应用程序。我想知道如何修改我的代码以将Bitmap
保存为JPEG格式的全分辨率?
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
我认为Bitmap
被压缩成更小的尺寸!
答案 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仅支持无损压缩,因此它将完全忽略质量参数,并始终保存图像而不降低其质量!