图像文件校验和作为独特内容比较优化

Vac*_*out 2 php checksum image

用户正在将照片上传到我们的 php 构建系统。由于内容不相关,我们将其中一些标记为禁止。I\xc2\xb4m 正在搜索“自动比较”算法的优化,该算法会跳过这些标记为禁止的照片。每次上传都需要与许多 vorbinden 进行比较。

\n\n

可能的解决方案:

\n\n

1/ 存储禁止的文件并比较整个内容 - 效果很好,但速度很慢。

\n\n

2/存储图像文件校验和并比较校验和——这是提高速度的想法。

\n\n

3/任何足够快并且可以比较照片之间相似性的智能算法。但我对 PHP 中的这些没有任何想法。

\n\n

最好的解决方案是什么?

\n

Wim*_*ink 5

不要计算校验和,而是计算哈希值!

我曾经创建过一个简单的应用程序,它必须在硬盘上查找重复的图像。它只会搜索 .JPG 文件,但对于每个文件,我都会计算前 1024 个字节的哈希值,然后将图像的宽度、高度和大小附加到它,以获得如下字符串:“875234:640:480: 13286”,我将其用作图像的密钥。事实证明,我没有看到该算法出现任何错误重复,尽管仍然存在错误重复的可能性。然而,当有人只向其中添加一个字节或对图像进行非常小的调整时,该方案将允许重复。

另一个技巧可能是减少每个图像的大小和颜色数量。如果将每个图像的大小调整为 128x128 像素,并将颜色数量减少到 16(4 位),那么最终会得到每个 8192 字节的合理的独特图案。根据该模式计算哈希值并使用该哈希作为主键。一旦命中,您可能仍然会出现误报,因此您需要将新图像的模式与系统中存储的模式进行比较。如果第一散列解决方案指示新图像是唯一的,则可以使用该模式比较。不过,我仍然需要为自己的工具解决一些问题。但这基本上是一种获取图像指纹然后进行比较的方法。

我的第一个解决方案将找到完全匹配。我的第二个解决方案会找到类似的图像。(顺便说一句,我在 Delphi 中编写了哈希方法,但从技术上讲,任何哈希方法都足够好。)