为什么PIL保存的图片和原图有不同的md5和

Why is image saved by PIL have different md5 sum compared with the original image

假设我有一张图片 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保存是否还有原图?

经过一些比较后,PIL 似乎重新压缩了图像(所有二进制数据都不相同),还有 headers 更改(对我来说是 Adob​​e header,标题和作者在这里但是消失)。
如果你想做一些比较,你可以这样做:

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

不,JPEG 是有损的。它会丢弃信息以使您的图像变小。不同的coders/decoders(即writers/readers)丢弃不同的信息,选择不同的质量设置。

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

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

另见 and here