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

问题描述 投票:1回答:2

假设我有一个图像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保存,我还有原始图像吗?

python computer-vision python-imaging-library jpeg
2个回答
1
投票

经过一些比较后,似乎PIL重新压缩图像(所有二进制数据都不一样),标题也改变了(对我来说,一个Adobe标题,标题和作者在这里但是消失了)。 如果你做一些比较,你可以做:

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

1
投票

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

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

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

另见herehere

© www.soinside.com 2019 - 2024. All rights reserved.