为什么PIL保存的图像与原始图像相比MD5总和不同

时间:2019-04-19 08:13:06

标签: python computer-vision python-imaging-library jpeg

假设我有一张图片pic.jpg。我先读取图像,然后保存。

from PIL import Image
im = Image.open('pic.jpg')
im.save('pic1.jpg', 'jpeg')

两张图片的md5总和不同:

$ md5sum pic.jpg
3191102e44fa5ebbb2aa52e042066dad
$ md5sum pic1.jpg
a6b17e3af3ff66715a2326db33548d11

如果我阅读并使用PIL保存,我是否仍然拥有原始图像?

2 个答案:

答案 0 :(得分:1)

经过一番比较之后,PIL似乎重新压缩了图像(所有二进制数据都不相同),标头也发生了变化(对我来说,这里是Adobe标头,标题和作者,但消失了)。
如果您可以进行比较,则可以:

xxd pic.jpg > pic.hex
xxd pic1.jpg > pic1.hex
diff pic.hex pic1.hex

答案 1 :(得分:1)

否,JPEG有损。它会丢弃信息以缩小图像。不同的编码器/解码器(即作家/读者)会丢弃不同的信息并选择不同的质量设置。

如果您希望能够保存和重新加载图像并且图像相同,则需要使用无损格式,例如PNG。

即使那样,您的图像也可能包含日期和时间,因此,如果加载或创建图像并保存,然后在2秒后再次保存,则两个文件的哈希值会有所不同。

另请参阅herehere