我试图通过首先将图像文件解码为Bitmap并将其压缩回JPEG来制作图像文件的副本。副本(~3mbs)大于原始文件(~2mbs)。有没有办法创建一个精确的副本?
Bitmap origBitmap = BitmapFactory.decodeFile(file);
FileOutputStream out = new FileOutputStream(file);
origBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
// this will give me a copy larger than the original image
我知道我可以使用FileOutputStream和FileInputStream来创建相同的副本。但我想对副本进行一些修改,Android不支持Javax.ImageIO。
FileOutputStream out = new FileOutputStream(file);
File old_file = new File(filePath);
FileInputStream input = new FileInputStream(old_file);
copyStream(input, out);
// this will give me an exact copy
答案 0 :(得分:1)
JPEG是一种有损格式,这意味着每次使用该算法时都会丢失一些数据。每次执行此操作时都会显得更糟,即使在高质量设置下也是如此。
您的副本可能更大,因为您使用的是100的质量设置。我敢打赌,原始文件是使用较低质量的设置制作的 - 通常人们使用70到90之间。