仅计算图像的核心图像数据(不包括元数据)的哈希

仅计算图像的核心图像数据(不包括元数据)的哈希,第1张

仅计算图像的核心图像数据(不包括元数据)的哈希

一种简单的方法是对核心图像数据进行哈希处理。对于PNG,您可以通过仅计算“关键块”(即以大写字母开头的块)进行计数。JPEG具有类似但更简单的文件结构。

ImageMagick中的可视哈希在对图像进行哈希处理时将其解压缩。在您的情况下,您可以立即对压缩的图像数据进行哈希处理,因此(如果正确实现),它应与对原始文件进行哈希处理一样快。

这是一个小的Python脚本,说明了这个想法。它可能对您不起作用,但至少应该表明我的意思:)

import structimport osimport hashlibdef png(fh):    hash = hashlib.md5()    assert fh.read(8)[1:4] == "PNG"    while True:        try: length, = struct.unpack(">i",fh.read(4))        except struct.error: break        if fh.read(4) == "IDAT": hash.update(fh.read(length)) fh.read(4) # CRC        else: fh.seek(length+4,os.SEEK_CUR)    print "Hash: %r" % hash.digest()def jpeg(fh):    hash = hashlib.md5()    assert fh.read(2) == "xffxd8"    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.digest()if __name__ == '__main__':    png(file("sample.png"))    jpeg(file("sample.jpg"))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5667033.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存