2015-04-03 73 views
2

同我試圖同時使圖像在我的服務器如何檢測,如果圖像名稱不同,但圖像是在PHP

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

獲取兩個文件內容並進行比較,使用'sha1_file()'進行比較,速度要快得多。 – Daan 2015-04-03 12:07:11

+0

@Daan抱歉,它的圖像混亂,所以我應該怎麼做,在這方面 – Vikram 2015-04-03 12:08:52

+1

有一個很好的答案[這裏](http://stackoverflow.com/a/29253608/1685196)。 – Michel 2015-04-03 12:10:46

回答

3

檢查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 

如果我創建了一個256×256的黑色正方形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和他們是相同的,那麼圖像是相同的。我所說的是即使它們的校驗和不同,圖像也可能是相同的。