2009-12-27 53 views
2

使用PHP檢查圖像是否唯一的最佳方法是什麼?假設我有一個約30張圖片(約500 * 500像素)的目錄,並且有人上傳了另一張圖片,那麼檢查上傳的圖片是否還沒有存在於目錄中的好方法是什麼?什麼是使用PHP檢查圖像是否唯一的好方法?

是否有某種方式來創建可以輕鬆比較的圖像哈希?然後,我可以將目錄中的圖像的哈希值保存在目錄中,並將其與上傳圖像的哈希值進行比較。

計算能力並不是一個問題,它不必每分鐘處理多張照片。事實上,具有一個像素差異的圖像將被視爲不同的圖像。系統應該能夠過濾出非常相似的圖像。

回答

1

快速的答案,但我推薦這種方法:

  • 使用md5sum散列圖像(有這個在PHP函數)。
  • 如果您使用的是數據庫,請將md5sum作爲圖片文件表格的一列,然後按該字段索引表格。
  • 否則,保持在這樣的平面文件的哈希值:

    68b329da9893e34099c7d8ad5cb9c940 file2.bmp 
    da1e100dc9e7bebb810985e37875de38 file1.jpg 
    
3

系統應該只能夠 過濾掉excactly 相同的圖像。

在這種情況下,您可能會忘記您正在討論圖像,並將它們視爲二進制文件,並使用hash_file()來創建哈希。

當然,這也會導致圖像的哈希值不同,這些哈希值僅在元數據上有所不同,例如JPEG圖像中的EXIF註釋。你必須決定這對你是否有問題。

+1

好聽點有關的元數據的一個巨大的可以,你知道有什麼方法可以自動刪除所有元數據與GD/Exif? – 2009-12-28 02:03:04

+1

我不會打擾走這條路,因爲可以有各種不同的元數據格式,甚至還有像JPG圖像這樣的狂野東西,RAR檔案會附加到最後,它可以作爲兩種文件格式使用(圖像解碼器將會忽略之後的東西圖像數據,而歸檔實用程序將查看檔案索引的文件末尾)。如果您不再將文件視爲字節序列,請一路走下去,看看您是否可以散列實際解碼的位圖數據 - 但不知道如何在PHP中執行此操作。 – 2009-12-28 02:10:14

2

即使像ID3標籤這樣的小細節發生了變化,文件的按字節進行比較也會失敗。要比較圖片內容,您必須打開圖片文件並創建實際圖片像素數據的哈希值。但即使這樣做,也可以通過兩次保存稍微不同質量等級的JPEG文件來解決 - 微妙的編碼差異會導致像素顏色值發生變化。

所以,如果你真的希望以匹配圖像內容跨格式和質量,您打開蠕蟲:)

相關問題