使用Python,如何计算TIFF图像的md5哈希值,不包括所有元数据?
使用JPG,我会这样做:
def jpeg(fh):
hash = hashlib.md5()
assert fh.read(2) == "\xff\xd8"
while True:
marker,length = struct.unpack(">2H", fh.read(4))
assert marker & 0xff00 == 0xff00
if marker == 0xFFDA: # Start of stream
hash.update(fh.read())
break
else:
fh.seek(length-2, os.SEEK_CUR)
print "Hash: %r" % hash.hexdigest()
>> jpeg(file("test.jpg"))
>> Hash: 'debb4956941795d6ef48717e4c9cc433'
不确定如何将其扩展为TIFF图像。
TIFF似乎比较棘手,因为图像中元数据的位置可能会发生变化(并不总是在开头或结尾)。
答案 0 :(得分:5)
使用Python Imaging Library中的Image模块。 tostring
类的Image
方法将像素数据作为字符串返回。
import Image # Python Imaging Library
import hashlib
def hashtiff(fn):
tf = Image.open(fn)
return hashlib.md5(tf.tostring()).hexdigest()
MD5有known weaknesses作为哈希算法。使用例如considered better SHA-256或SHA-512。