Почему изображения, сохраненные в PIL, имеют другую сумму md5 по сравнению с исходным изображением - PullRequest
1 голос
/ 19 апреля 2019

предположим, у меня есть изображение 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

У меня все еще остается исходное изображение, если я читаю, а затем сохраняюс ПИЛ?

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Нет, JPEG с потерями. Он выбрасывает информацию, чтобы сделать ваше изображение меньше. Разные кодеры / декодеры (т.е. писатели / читатели) выбрасывают разную информацию и выбирают разные настройки качества.

Если вы хотите сохранить и перезагрузить изображение, чтобы оно было идентичным, вам нужно использовать формат без потерь, например PNG.

Даже в этом случае ваше изображение потенциально содержит дату и время, поэтому, если вы загрузите или создадите изображение и сохраните его, а затем сохраните его снова через 2 секунды, два файла будут иметь хэши, которые будут различаться.

См. Также здесь и здесь .

1 голос
/ 19 апреля 2019

После некоторого сравнения кажется, что PIL повторно сжимает изображение (все двоичные данные не совпадают), также меняются заголовки (для меня заголовок, заголовок и автор Adobe были здесь, но исчезли).
Если вы сделаете некоторое сравнение, вы можете сделать:

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