如何在php中检测图像名称是否不同但图像是否相同
我正在尝试在将图像放入服务器时进行验证 1.如果图像名称不同,但图像相同,则不执行任何操作 我怎么能发现呢 我的代码看起来像这样如何在php中检测图像名称是否不同但图像是否相同,php,file,image-processing,Php,File,Image Processing,我正在尝试在将图像放入服务器时进行验证 1.如果图像名称不同,但图像相同,则不执行任何操作 我怎么能发现呢 我的代码看起来像这样 if (file_exists($ficherof)) { $x=file_get_contents($ficherof) ; if($imagen['sha1']!=sha1($x)) { //do something }
if (file_exists($ficherof)) {
$x=file_get_contents($ficherof) ;
if($imagen['sha1']!=sha1($x))
{
//do something
}
}
else
//here I have to check if the file name is different but the files are same then donot upload
file_put_contents($ficherof, $contenido);
检查两个图像的总和以比较它们是不正确的!您可以有两个具有不同总和的相同文件,因为日期/时间可以嵌入EXIF数据、PNG标题或TIFF标记中 正确的方法在我的答案中 看这个。我创建了两个相同的黑色正方形并进行比较:
convert -size 256x256 xc:black 1.png
convert -size 256x256 xc:black 2.png
diff [12].png
Binary files 1.png and 2.png differ
为什么它们不同?因为日期在其中:
identify -verbose 1.png 2.png | grep date
date:create: 2015-04-03T13:31:30+01:00
date:modify: 2015-04-03T13:31:30+01:00
date:create: 2015-04-03T13:31:33+01:00
date:modify: 2015-04-03T13:31:33+01:00
如果我创建一个256x256黑色正方形GIF和一个相同的256x256黑色PNG呢
convert -size 256x256 xc:black 1.png
convert -size 256x256 xc:black 1.gif
看看它们,它们的大小不同,显然会有不同的校验和
ls -l 1*
-rw-r--r-- 1 mark staff 392 3 Apr 13:34 1.gif
-rw-r--r-- 1 mark staff 279 3 Apr 13:34 1.png
但是ImageMagick正确地告诉我有零像素不同
convert -metric ae 1.png 1.gif -compare -format "%[distortion]" info:
0
当然,如果比较
sha
和,它们是相同的,那么图像是相同的。我想说的是,即使它们的校验和不同,图像也可能是相同的。获取两个文件内容并进行比较,使用sha1_file()
进行比较,速度要快得多。@Daan对混淆表示抱歉,这是一个图像,所以我应该怎么做呢?考虑到这是一个很好的答案。@michell对图像也做同样的工作。我更新了我的问题