2015-10-13 112 views
2

我想获得一个Multi-TIf第一页的哈希MD5。我可以在下面获得A.tiff的散列,但是如何仅读取第一页的散列?Python多哈第一图像哈希

import hashlib 

print(hashlib.md5(open('c:\\temp\\HASH\A.tif','rb').read()).hexdigest()) 

回答

0

类似下面的内容可能会有所帮助。您可以使用支持多页TIFF文件的PIL库。有了这个,你可以使用seek()拿到第一页数据:

import hashlib 
from PIL import Image 
from itertools import chain 

img = Image.open(r'A.tif') 
img.seek(0) 

md5 = hashlib.md5() 

if isinstance(img.getpixel((0,0)), int): 
    md5.update(bytes(img.getdata())) 
else: 
    md5.update(bytes(chain.from_iterable(img.getdata()))) 

print(md5.hexdigest()) 

对于大多数图像,这将提供一个元组,它返回值黑白/灰度图像。这些全部转换为字节并通过md5.update()运行。

+0

非常感谢,但是我在第10行得到一个错误md5.update(struct.pack('3B',* p)) TypeError:pack()参数在*之后必须是一个序列,而不是int – Ahmad

+0

你使用的是什么版本的Python?这在2.7.9进行了测试。 –

+0

你可以尝试以下代替'md5.update(struct.pack('3B',p [0],p [1],p [2]))' –