仅计算TIFF的核心图像数据的散列

ens*_*are 1 python tiff

使用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'
Run Code Online (Sandbox Code Playgroud)

不知道如何将其扩展到TIFF图像.

使用TIFF似乎更棘手,因为图像中元数据的位置可能会发生变化(它并不总是在开头或结尾).

Rol*_*ith 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()
Run Code Online (Sandbox Code Playgroud)

MD5 已知作为哈希算法的弱点.使用例如SHA-256或SHA-512 被认为 更好.