1

使用 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 似乎更棘手,因为图像中元数据的位置可以改变(它并不总是在开头或结尾)。

4

1 回答 1

5

使用 Python 图像库中的图像模块。该类的tostring方法Image将像素数据作为字符串返回。

import Image # Python Imaging Library
import hashlib

def hashtiff(fn):
    tf = Image.open(fn)
    return hashlib.md5(tf.tostring()).hexdigest()

MD5作为散列算法具有已知的弱点。使用例如 SHA-256 或 SHA-512被认为 更好。

于 2012-08-24T20:31:46.783 回答