【问题标题】:PHP: How to compare images without storing the files themselves?PHP:如何在不存储文件本身的情况下比较图像?
【发布时间】:2013-07-03 05:01:32
【问题描述】:

我正在构建一个类似于画布绘画艺术生成器的应用。细节并不重要——重要的是确保同一张图片不会被保存两次。

如果多次生成相同的图像,这很好,但在保存之前,我需要检查所有图像以获取相同的副本。最终会有数千甚至数百万的这些图像,因此存储原始文件并检查每一个与活动文件是非常不合理的。有没有办法将图像文件简化为唯一的键或字符串?

我考虑过某种 SHA 转换 - 根据已记录的哈希表检查图像的哈希非常容易 - 但令人痛苦的是,缺乏有关该主题的信息,并且 SHA 重复的可能性很小。任何帮助表示赞赏 - 谢谢!

【问题讨论】:

  • 我做了类似的事情,根据图像数据计算哈希值,并使用它来生成保存的图像缩略图的文件名。这在大约 100,000 张图像中运行良好,没有看到任何错误匹配,尽管这是可能的。它确实很好地找到了重复项

标签: php image hash


【解决方案1】:

您可以使用hash_file 函数来执行此操作。 (这是一个 pecl 扩展)

$hash = hash_file("sha256", $filename);

基本上可能会与哈希发生冲突,但可能性很小。为了进一步防范它们,您可以将其他属性(例如文件大小)添加到哈希中。

$hash = hash_file("sha256", $filename)."-".filesize($filename);

现在只有两个大小完全相同且产生相同哈希的文件才可能发生冲突。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2015-10-16
    • 2019-01-05
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多