В настоящее время я перемещаю скрипт, который создает локальные уязвимые хэши из изображений с хоста Windows на debian.
Моя проблема заключается в том, что Pillow возвращает разные данные изображения из одного и того же исходного изображения на обеих платформах.
Я наблюдал это поведение только для jpegs.
Тестовый пример:Различные данные изображения из того же источника с Pillow
from PIL import Image
import md5
import urllib2
from cStringIO import StringIO
urls = ("https://i.imgur.com/Mx6NQwM.jpg","https://i.imgur.com/MN1TKu5.png")
print("VERSION %s" % Image.VERSION)
for url in urls:
response = urllib2.urlopen(url).read()
img = Image.open(StringIO(response)).convert("RGB")
img_md5 = "".join("".join(map(chr, x)) for x in img.getdata())
print("URL: %s" % url)
print("Plain md5:\t%s" % md5.new(response.read()).hexdigest())
print("Image md5:\t%s" % md5.new(img_md5).hexdigest())
Если возвращать одни и те же md5 хэшей в обеих системах. Мои результаты:
для Windows 7:
VERSION 1.1.7
URL: https://i.imgur.com/Mx6NQwM.jpg
Plain md5: 4aacd5b92575ffca6d0ab884f95cc1f9
Image md5: 10eaf568f4d9d33c722ea702fc4d1025
URL: https://i.imgur.com/MN1TKu5.png
Plain md5: d05e6dc1311339b806e5998f15fc818c
Image md5: 38fc986c5cd9605038ee627b11687344
Debian Jessie:
VERSION 1.1.7
URL: https://i.imgur.com/Mx6NQwM.jpg
Plain md5: 4aacd5b92575ffca6d0ab884f95cc1f9
Image md5: 7347c6286f4d917649d967a5025e392e
URL: https://i.imgur.com/MN1TKu5.png
Plain md5: d05e6dc1311339b806e5998f15fc818c
Image md5: 38fc986c5cd9605038ee627b11687344
В LSHS несколько похожи, но отличается достаточно для того, чтобы быть проблематичным.
Версия для подушек на обеих системах - 2.9.0.
Есть ли способ получить такое же значение пикселя в системе debian, как и в Windows?
И вообще: Кто-нибудь знает, почему это происходит?
Чтобы убедиться, что Pillow правильно обрабатывает файл jpeg на обеих системах, вы пытались отображать данные или преобразовывать их в png, а затем вычислять md5, в обеих системах? –
@SteveBarnes Просто попробовал, и изображения выглядят правильно, и преобразование в png возвращает ожидаемые результаты (разные для первого изображения, то же самое для второго) – SleepProgger