最初的任务是处理图像,对其进行哈希处理,使一些重型图像工作并将此哈希和工作结果存储在数据库中, 在下一个使用相同图像的请求期间,我想将图像哈希值与数据库中的哈希值进行比较,并加载数据库缓存的结果以减少繁重的工作量。
所以问题是,要哈希什么?用什么来哈希? 我看到 phash 的良好 php 实现,但似乎它对于相似性检查很有用,但我们需要精确匹配。 phash 也适合精确数学吗?
谢谢!
PHP为此提供了一个内置函数,这可能是最简单的解决方案:
$hash = hash_file("sha1", '/path/to/image');
您可以使用此检查来进行精确匹配。发生冲突的可能性很小,但您可以通过在比较中使用文件路径或数据库 ID 来帮助缓解这种情况。
这个类似问题中的答案提供了更多选项。
如果您使用 PHP 8.1 或更高版本,请考虑使用 https://github.com/sapientpro/image-comparator 库。该软件包建立在感知哈希之上,并提供有效比较多个图像的功能。
$comparator = new SapientPro\ImageComparator\ImageComparator();
$similarity = $comparator->compare('your-images/your-image1.jpg', 'your-images/your-image12.jpg');
echo $similarity; // Outputs: 89.3