使用PHP检查图像是否唯一的好方法是什么?

时间:2009-12-27 23:40:45

标签: php image unique

使用PHP检查图像是否唯一的最佳方法是什么?假设我有一个大约30张图像的目录(大约500 * 500像素),有人上传了另一张图片,检查上传的图像是否还没有在目录中的好方法是什么?

是否有某种方法来创建可以轻松比较的图像哈希值?然后我可以保存目录中图像的哈希值,并将它们与上传图像的哈希值进行比较。

计算能力不是问题,它不必每分钟处理多张图片。事实上,具有一个像素差异的图像将被视为不同的图像。系统应该能够过滤掉完全相同的图像。

5 个答案:

答案 0 :(得分:6)

在图片文件上使用md5sha1

答案 1 :(得分:5)

run a checksum on the file ..如果它与您已经拥有的那个匹配,那么它可能是完全相同的图像。

答案 2 :(得分:3)

  

系统应该能够   过滤出精确的图像   同样的。

在这种情况下,您可以简单地忘记您正在谈论图像并将它们视为二进制文件,使用hash_file()来创建哈希。

当然,这也会导致图像的不同哈希值仅在元数据中有所不同,例如JPEG图像中的EXIF注释。你必须决定这对你来说是否有问题。

答案 3 :(得分:2)

即使像ID3标签这样的小细节发生了变化,文件的字节比较也会失败。要比较图片内容,您必须打开图像文件并创建实际图像像素数据的哈希值。但是,即使这样也可以通过两次保存JPEG文件而质量水平略有不同来解决 - 细微的编码差异会导致像素颜色值发生变化。

因此,如果您真的希望在格式和质量上匹配图像内容,那么您将打开一大堆蠕虫:)

答案 4 :(得分:1)

快速回答,但我建议采用这种方法:

  • 使用md5sum来散列图像(PHP中有一个函数)。
  • 如果您正在使用数据库,请让md5sum成为图片文件表的一列,并按该字段索引该表。
  • 否则,请将哈希值保存在这样的平面文件中:

    68b329da9893e34099c7d8ad5cb9c940 file2.bmp
    da1e100dc9e7bebb810985e37875de38 file1.jpg