Python 为什么PIL保存的图像与原始图像的md5和不同

Python 为什么PIL保存的图像与原始图像的md5和不同,python,computer-vision,python-imaging-library,jpeg,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保存,是否仍保留原始图像?经过一些

假设我有一张图片
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重新压缩了图像(所有二进制数据都不相同),并且标题也会更改(对于我来说,Adobe标题、标题和作者在这里,但不存在)。
如果你想做一些比较,你可以:

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

不,JPEG是有损的。它会丢弃信息,使图像变小。不同的编码器/解码器(即编写器/读取器)丢弃不同的信息并选择不同的质量设置

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

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


另请参见和。

我的答案或其他答案是否解决了您的问题?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢