【问题标题】:What is a good way to check if an image is unique using PHP?使用 PHP 检查图像是否唯一的好方法是什么?
【发布时间】:2009-12-27 23:40:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: php image unique


    【解决方案1】:

    在图像文件上使用md5sha1

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        系统应该能够 过滤掉完全正确的图像 一样的。

        在这种情况下,您可能会忘记您在谈论图像,而只是将它们视为二进制文件,使用 hash_file() 创建哈希。

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

        【讨论】:

        • 关于元数据的好点,你知道有什么方法可以用 GD / Exif 自动删除所有元数据吗?
        • 我不会费心走那条路,因为可以有各种不同的元数据格式,甚至还有像 JPG 图像这样的狂野的东西,最后附有 RAR 档案,它可以作为两种文件格式 (图像解码器将忽略图像数据之后的内容,而存档实用程序将查看文件末尾的存档索引)。如果您超出将文件视为字节序列的范围,请继续查看是否可以散列实际解码的位图数据 - 但不确定如何在 PHP 中执行此操作。
        【解决方案4】:

        即使像 ID3 标签这样的小细节发生了变化,文件的逐字节比较也会失败。要比较图片内容,您必须打开图像文件并创建实际图像像素数据的哈希值。但即便如此,也可以通过保存两次质量级别略有不同的 JPEG 文件来消除这种情况——细微的编码差异会导致像素颜色值发生变化。

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

        【讨论】:

          【解决方案5】:

          快速回答,但我推荐这种方法:

          • 使用 md5sum 对图像进行哈希处理(PHP 中有一个函数可以实现这一点)。
          • 如果您使用的是数据库,请将 md5sum 设置为图片文件表的一列,并按该字段为该表编制索引。
          • 否则,请将哈希值保存在一个平面文件中,如下所示:

            68b329da9893e34099c7d8ad5cb9c940 file2.bmp
            da1e100dc9e7bebb810985e37875de38 file1.jpg
            

          【讨论】:

            猜你喜欢
            • 2011-11-15
            • 1970-01-01
            • 2012-04-14
            • 2015-04-25
            • 1970-01-01
            • 2021-10-30
            • 1970-01-01
            • 2016-01-30
            • 1970-01-01
            相关资源
            最近更新 更多