2010-04-02 60 views
3

我想寫一些代碼來從JPG中提取Exif信息。JPG段長度編碼

Exif存儲在JPG文件的APP1段中。據the Exif spec,將APP1段的格式應該這樣開始:

FF E1  // APP1 segment marker 
nn nn  // Length of segment 
45   // 'E' 
78   // 'x' 
69   // 'i' 
66   // 'f' 

它去,直到有一個FF其次是比FF00其他的東西。

在十六進制編輯器中查看JPG,我可以看到FF E1Exif字符串,但我在解碼長度字節時遇到問題。例如:在一個jpg中,我的十六進制編輯器告訴我,APP1段長度爲686個字節,但長度字節爲F7 C8

我應該如何使用這些字節來提出686小數?

編輯:下面是示例文件的第一部分:

FF D8 FF E1 F7 C8 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08 

編輯:其實,我想我可能知道是怎麼回事。 APP1細分市場實際上是否「包含」其他細分市場?例如,如果縮略圖數據被認爲是在APP1內部,那麼該長度似乎更合理。任何人都可以確認/否認這一點?

+1

你確定APP1段不是63432字節?你怎麼知道它是686?它可能是686加上縮略圖的大小。 – Gabe 2010-04-02 00:56:20

+0

@gabe我查找了一個新段的下一個FF xx標記字節。那是對的嗎? – Blorgbeard 2010-04-02 01:02:22

+0

是的,我期望FFDB成爲下一個標記(DQT)。 – Gabe 2010-04-02 01:07:31

回答

3

事實證明,APP1段包含縮略圖(請參閱鏈接的EXIF文檔並向下滾動到邏輯頁面12),因此686是一個紅色鯡魚(可能是直到縮略圖的字節數)。 F7C8是直到DQT段的實際字節數,它很大,因爲它包含一個縮略圖。

1

你不行。那些字節不代表686,但長度字節在「Exif」字符串之前。

沒有看到文件,就無法診斷。發佈文件的前20個十六進制字節可能會很好。

+0

完成後,請查看我的編輯。 – Blorgbeard 2010-04-02 00:53:52