【问题标题】:Unique image hash that does not change if EXIF info updated如果 EXIF 信息更新,唯一的图像哈希不会改变
【发布时间】:2011-12-26 08:00:29
【问题描述】:

我正在寻找一种在 python 和 php 中为图像创建唯一哈希的方法。

我曾考虑对原始文件使用 md5 和,因为它们可以快速生成,但是当我更新 EXIF 信息(有时时区关闭)时,它会改变总和并且哈希也会改变。

是否有任何其他方法可以为这些文件创建在 EXIF 信息更新时不会更改的哈希?效率是一个问题,因为我将为大约 500k 30MB 图像创建哈希。

也许有一种方法可以创建图像的 md5 哈希,不包括 EXIF 部分(我相信它写在文件的开头?)提前谢谢。示例代码表示赞赏。

【问题讨论】:

标签: php python imagemagick


【解决方案1】:

Imagemagick 已经提供了获取图像签名的方法。根据PHP documentation

为图像像素流生成 SHA-256 消息摘要。

所以我的理解是签名不受exif信息变化的影响。

另外,我已经检查了PythonMagick.Image.signature 方法在 python 绑定中可用,因此您应该能够在两种语言中使用它。

【讨论】:

    【解决方案2】:

    在 Python 中,您可以使用 Image.tostring() 仅计算图像数据的 md5 哈希值,而不使用元数据。

    import Image
    import hashlib
    
    img = Image.open(filename).convert('RGBA')
    m=hashlib.md5()
    m.update(img.tostring())
    print(m.hexdigest())
    

    【讨论】:

    • 有没有办法在 php 中生成相同的哈希?我在我的应用程序中使用这两种语言。谢谢。
    • 您可以考虑使用 php 的 GD 库来创建临时 jpeg(这将删除 exif 数据),然后生成生成的二进制文件。但是,对于 30MB 图像,这不会是一个高效的过程......除非你有大量的 RAM,否则这会有点慢。
    猜你喜欢
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多