PHP:如何在不存储文件本身的情况下比较图像


PHP: How to compare images without storing the files themselves?

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

如果同一张图像生成多次也没关系,但在保存之前,我需要检查迄今为止的所有图像是否有相同的副本。最终会有成千上万甚至数百万张这样的图像,所以存储原始文件并对照活动文件检查每一张是非常不合理的。有没有办法将图像文件简化为唯一的键或字符串?

我考虑过某种SHA转换——根据记录的哈希表检查图像的哈希真的很容易——但令人痛心的是,缺乏关于该主题的信息,而且SHA重复的可能性很小。感谢您的帮助-谢谢!

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

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

基本上,与散列的冲突是可能的,但极不可能。为了进一步防范它们,你可以在散列中添加额外的属性,比如文件的大小。

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

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