有没有一种方法可以使用php检查具有不同名称的重复图像?

有没有一种方法可以使用php检查具有不同名称的重复图像?,php,Php,有没有一种方法可以使用php检查具有不同名称的重复图像?我想删除所有重复项。是的,您可以迭代所有文件并使用hash_file函数比较它们: 我想一个简单的解决方案是使用md5()对图像进行校验和 打开一个目录,遍历生成MD5的文件,比较MD5,删除重复项 编辑:这里有一个使用hash\u file()的脚本 您可以通过文件的散列来比较和检查它 它返回40个字符的十六进制数我花了很多时间在php中寻找最好的解决方案,但是失败了,读了我的5步到天堂(或者只是得到第5步) hash_文件无法按预期工作

有没有一种方法可以使用php检查具有不同名称的重复图像?我想删除所有重复项。

是的,您可以迭代所有文件并使用hash_file函数比较它们:

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

打开一个目录,遍历生成MD5的文件,比较MD5,删除重复项

编辑:这里有一个使用
hash\u file()的脚本


您可以通过文件的散列来比较和检查它


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

我花了很多时间在php中寻找最好的解决方案,但是失败了,读了我的5步到天堂(或者只是得到第5步)

  • hash_文件无法按预期工作,例如,在一个包含11000张不同名称图片的文件夹中,我知道只有800个唯一的hash_文件()找到了30个匹配项

  • 我无法在Windows+Openserver上安装类似的第三方库

  • 尝试按主色或逐像素比较
    ImageColorAt()
    ,创建“图像的数字戳记”。它的工作速度非常慢,编码也非常多,而且最终非常糟糕——改变大小或合并/旋转图像是难以捉摸的

  • 检查Github以找到readytogo解决方案,但在PHP上没有任何解决方案(为什么?这让我感到惊讶)

  • 最后,我找到了一个共享桌面程序,它工作得非常好(很快!它在多线程中工作,在30秒内将CPU加载到100%、8gb和11000个图像),并且具有所有必要的功能、异常和过滤。在这11000张图片中,该程序创建了所有视觉相似的图片,向我显示组和实例,允许使用自动过滤器等移动选定的图片。主要缺点是金钱,但也有洪流;)


  • +1用于使用(很可能/希望)不会将整个文件内容加载到字符串中的函数。在GBS中检查文件时会显示错误。如果对图像进行了更改,它会工作吗?比如添加水印之类的?谢天谢地,与另一个完全相同的文件是deletedI创建的PHP解决方案,在一年多以前,现在用于数十亿张图片,节省了TB的空间
    <?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);
    }