有没有办法使用PHP检查不同名称的重复图像?

时间:2012-05-09 17:06:21

标签: php

有没有办法使用PHP检查不同名称的重复图像?我想删除所有重复项。

4 个答案:

答案 0 :(得分:8)

是的,你可以迭代所有文件并使用hash_file函数来比较它们: http://php.net/manual/en/function.hash-file.php

答案 1 :(得分:3)

我认为一个简单的解决方案是使用md5()对图像进行校验和。

打开目录,循环生成md5s的文件,比较md5s,删除重复项。

编辑:这是使用hash_file()

的脚本
<?php

$dir = "/full/path/to/images";
$checksums = array();

if ($h = opendir($dir)) {
    while (($file = readdir($h)) !== false) {

        // skip directories
        if(is_dir($_="{$dir}/{$file}")) continue;

        $hash = hash_file('md5', $_);

        // delete duplicate
        if (in_array($hash, $checksums)) {
            unlink($_);
        }
        // add hash to list
        else {
            $checksums[] = $hash;
        }
    }
    closedir($h);
}

答案 2 :(得分:2)

您可以通过文件的sha1_file哈希进行比较和检查

返回40个字符的十六进制数

答案 3 :(得分:0)

我花了很多时间在php中寻找最佳解决方案,但失败了,请阅读我的5步到天堂(或者只是步骤#5)。

  1. hash_file无法正常工作,例如在11000个不同名称的图片文件夹中,我知道只有800个唯一的,hash_file()只能找到30个匹配。

  2. 我无法在Windows + Openserver上安装http://libpuzzle.pureftpd.org/project/libpuzzle/php之类的第三方库。

  3. 尝试通过主色或逐像素ImageColorAt()进行比较,创建&#34;图像的数字标记&#34;。它工作得很慢,很多编码,最后非常糟糕 - 改变大小或合并/旋转图像是难以捉摸的。

  4. 检查Github找到readytogo解决方案,但PHP上没有任何解决方案(为什么?这对我来说很惊讶)。

  5. 最后,我发现共享软件桌面程序http://www.mindgems.com/products/VS-Duplicate-Image-Finder/VSDIF-Tutorials.htm?postinstall=1只能超级工作(快速!它可以在多线程中工作,并且在大约30秒内将CPU加载到100%,8gb和11000个图像)并且所有必要的功能,例外和过滤。在那些11000张图片中,这个程序创建了所有视觉上相似的图像,显​​示了我的组和实例,允许使用自动过滤器等进行选择。主要的缺点是钱,但有种子;)