有没有办法使用PHP检查不同名称的重复图像?我想删除所有重复项。
答案 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)。
hash_file无法正常工作,例如在11000个不同名称的图片文件夹中,我知道只有800个唯一的,hash_file()只能找到30个匹配。
我无法在Windows + Openserver上安装http://libpuzzle.pureftpd.org/project/libpuzzle/php之类的第三方库。
尝试通过主色或逐像素ImageColorAt()
进行比较,创建&#34;图像的数字标记&#34;。它工作得很慢,很多编码,最后非常糟糕 - 改变大小或合并/旋转图像是难以捉摸的。
检查Github找到readytogo解决方案,但PHP上没有任何解决方案(为什么?这对我来说很惊讶)。
最后,我发现共享软件桌面程序http://www.mindgems.com/products/VS-Duplicate-Image-Finder/VSDIF-Tutorials.htm?postinstall=1只能超级工作(快速!它可以在多线程中工作,并且在大约30秒内将CPU加载到100%,8gb和11000个图像)并且所有必要的功能,例外和过滤。在那些11000张图片中,这个程序创建了所有视觉上相似的图像,显示了我的组和实例,允许使用自动过滤器等进行选择。主要的缺点是钱,但有种子;)