我目前正在移動一個腳本,從圖像從Windows主機創建本地敏感哈希到debian之一。
我的問題是Pillow從兩個平臺上的相同源圖像返回不同的圖像數據。
我只觀察jpegs的這種行爲。
測試用例:不同的圖像數據來自同一個來源與枕頭
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的傑西:
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上得到的那樣?
而且一般來說:有人知道爲什麼會發生這種情況嗎?
只是爲了確保枕頭在兩個系統上正確處理jpeg文件,您是否嘗試在兩個系統上顯示數據或將其轉換爲png,然後計算md5? –
@SteveBarnes剛剛嘗試過,圖像看起來正確,並且轉換爲png返回了預期結果(第一張圖像不同,第二張圖像也一樣) – SleepProgger