如何检测图像名称是否不同但图像在php中是相同的

时间:2015-04-03 12:02:39

标签: php file image-processing

我正在尝试在将图像放入我的服务器时进行验证

1.如果图像名称不同但图像相同则不执行任何操作。

如何检测

我的代码看起来像这样

        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);

1 个答案:

答案 0 :(得分:4)

检查两张图像的sha总和以便比较它们是不正确的!您可以拥有两个具有不同sha总和的相同文件 - 因为日期/时间可以嵌入EXIF数据,PNG标头或TIFF标签中。

正确地做到这一点的方法是在我的回答中...... here

注意这一点。我创建了2个IDENTICAL黑色方块并进行比较:

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正确地告诉我有不同的ZERO像素

convert -metric ae 1.png 1.gif -compare -format "%[distortion]" info:
0

当然,如果您比较sha总和并且它们是相同的,那么图像是相同的。我所说的是,即使它们的校验和不同,图像也可能是相同的。