栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一种简单的方法是对核心图像数据进行哈希处理。对于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"))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660917.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号