Python多哈第一图像哈希
问题描述:
我想获得一个Multi-TIf第一页的哈希MD5。我可以在下面获得A.tiff
的散列,但是如何仅读取第一页的散列?Python多哈第一图像哈希
import hashlib
print(hashlib.md5(open('c:\\temp\\HASH\A.tif','rb').read()).hexdigest())
答
类似下面的内容可能会有所帮助。您可以使用支持多页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()
运行。
非常感谢,但是我在第10行得到一个错误md5.update(struct.pack('3B',* p)) TypeError:pack()参数在*之后必须是一个序列,而不是int – Ahmad
你使用的是什么版本的Python?这在2.7.9进行了测试。 –
你可以尝试以下代替'md5.update(struct.pack('3B',p [0],p [1],p [2]))' –