2009-12-28 72 views

回答

0

獲得像素數據散列和的一種簡單方法是將JPEG轉換爲32Bit BMP或者PNG格式,並從中計算出哈希值。這將從JPEG中去除所有相關信息,甚至可以匹配具有不同編碼的JPEG,從而產生相同的像素數據。當然,如果您有它,也可以直接使用生成的BMP中的內存像素數據(即Windows有幾個API函數可以從任何支持的圖像類型中獲取它)。

+1

解碼後的JPEG可能因解碼器中使用的舍入而異。你通常不會看到差異,但它會改變校驗和。 – 2009-12-28 21:28:12

0

你必須看看每種格式。對於JPEG,它看起來像the structure意味着您可以對以FFEn開頭的部分(例如0xFFE1)執行校驗和,並校驗每個標記之後指定的字節(它看起來像標記後面的長度,並且是大字節中的2個字節) endian格式)。有關更多詳細信息,請參閱here

+0

從我能告訴0xFFE?標記是元數據。你讀到的是什麼讓你覺得呢? – CoolAJ86 2009-12-29 21:15:16

+0

它看起來像是元數據的邊界(例如,從FFE1開始獲取長度,那麼該長度是EXIF數據)。見http://www.media.mit.edu/pia/Research/deepview/exif。html#ExifMarker – 2009-12-30 14:10:25

0

對於jpeg和exif,我不知道其他人。

我的JPEG規範叫做JFIF(JPEG文件交換格式),它來自ISO 10918-1的附錄B,和所有ISO規範一樣,它需要仔細閱讀才能弄清楚如何將規範轉換爲數據結構。我認爲this更容易遵循

EXIF格式很像TIFF格式解析。每個塊都有一個類型和一個大小,所以你只是走塊,直到你到達圖像數據塊。它有一個指向圖像數據的指針(實際上是指向條帶的指針,但是我非常肯定你可以假設在第一條圖像數據到文件末尾的所有內容都是圖像數據)

exif格式有its own website

+0

哪個標記是指向圖像數據的指針? – CoolAJ86 2009-12-29 21:18:47

0

由於您想對各種圖像格式進行此操作,因此您應該只使用通用圖像解壓縮庫並對未壓縮數據運行校驗和,這樣即使編碼相同

如果你想限制自己JPEG,你可以校驗SOI和EOI之間的數據。This answer可以稍微適合做你需要的東西。

1

校驗和支持,我認爲這個問題是與此相關的一個Compute hash of only the core image data (excluding metadata) for an imagehttps://stackoverflow.com/a/10075170/890106給出答案的元素,如果你正在尋找的代碼。

雖然它可能不適用於所有JPG變體:其中一些可以嵌入多個圖像(MPF/CIPA多圖片格式,更多信息請登錄http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/MPF.html),您可能仍然有一些元數據。另外,某些軟件在文件末尾以 - [0-9A-F] +的形式放置UID,並且不應讀取它。如果可能對校驗像素進行最安全的解決方案(儘管您仍然可以對方向,顏色配置文件等有影響)。