EXIF格式分析及通過XML處理 3

2021-08-21 22:47:59 字數 2697 閱讀 3338

exif格式分析及通過xml處理<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

猛禽[mental studio](個人專欄)(blog)

下面是乙個典型的

exif jpeg

檔案格式分析結果(原始檔為一張用

nikon coolpixel 775

相機拍攝的**,所用的

exif

版本是2.1

,與2.2

版差別不大):

jpeg soi : ff d8 // 起始

exif flag : 'exif', 0, 0

tiff header:

byte order: 'ii'

flag : 2a 00

ifd0 offset : 08 00 00 00

entries count : 0b 00 // 11

ifd entry :

tag : 0e 01 // image description 影象說明

type : 02 00 // ascii

size : 0b 00 00 00

value : 92 00 00 00 // from tiff header

ifd entry:

tag : 0f 01 // make 製造

type : 02 00

size : 06 00 00 00

value: b2 00 00 00

ifd entry:

tag : 10 01 // model 型號

type : 02 00

size : 05 00 00 00

value: ca 00 00 00

…ifd entry:

tag : 69 87 // exif ifd

type : 04 00 // long

size : 01 00 00 00

value: 1c 01 00 00 // offset of exif ifd

end of ifd0

ifd1 offset : 18 03 00 00

... // 存放ifd的value資料

exif ifd :

entries count : 18 00

ifd entry :

tag : 9a 82 // exposure time

...end of exif ifd

next ifd : 00 00 00 00 // 按標準ifd鍊錶約定,表示沒有後繼ifd

... // 存放exif ifd的value資料

ifd1 : // exif中用於存放縮圖

entries count : 06 00

ifd entry :

tag : 03 01

...end of ifd1

next ifd : 00 00 00 00 // exif只用到兩個tiff ifd

... // thumbnail etc.

// end of tiff header

// 其它jpeg marker segments

jpeg eoi : ff d9 // 結束

對exif格式的分析,至此基本上告乙個段落了。從分析結果上可以看出,exif是一種非常靈活的格式,具有非常好的可擴充性,要想較好地處理其中的相關資料也是比較麻煩的。

其困難主要在於幾個方面:

1、對於每種不同的ifd entry type,需要用不同的方法獲取資料,特別是對於資料長度不同時,可能採用不同的資料儲存方式,而ifd entry的數量又可能很多,每個entry根據tag不同又有不同的意義 2、

exif ifd是作為tiff ifd的子鍊錶形式存在(因為exif的ifd裡定義了不同於tiff標準的tag,要保持與標準的tiff格式互用,必須這樣做),使得原來的鍊錶結構變成了樹形結構 3、

tag的種類和數量非常之大,在exif規範裡定義了各個tag的支援級別(見[1]4.6.8),光是jpeg格式下必須支援的tag就有十幾個,tiff格式更多,再加上可選支援的tag,有幾十上百個,並且還存在未來繼續擴充的可能

4、對於可支援不同語言的軟體來說,同乙個tag的意義要用每一種支援的語言表達一次,如果將這部分處理寫入**,對於增加新的語言支援會帶來不必要的麻煩

為了解決這些困難,必須要找到乙個同樣是非常靈活的處理方法來處理exif資料。而xml正是這樣一種方法。從前面的分析結果可以看出,exif的資料記錄方式是層層巢狀的樹形結構,是非常適合用xml的,因為xml也是這樣的樹形結構。

通過定義一套xml標籤,然後將exif資料轉換成xml文件,可以最大限度地保留exif資料的原始內容及結構。並且作為一種通用格式,xml可以很方便地進行再處理,比如:通過xslt進行轉換,使之成為html或其它便於顯示的格式;或者將此xml傳遞給其它軟體作進一步處理等。

對於前面說到的困難,xml都很好地解決:

1、不同型別的問題,通過轉換為xml,將所有的value都轉換成字串,便於統一處理 2、

xml本來就是樹形結構,可以在轉換的時候方便地通過調整節點位置,使各ifd統一處理

3、可以將所有的tag原樣匯出到xml中,在以後對xml的處理時再根據tag進行處理,比如通過修改xsl檔案實現對新增tag的支援

4、同樣是對xml處理時才需要面對具體的tag,比如為不同的語言提供相應的xsl檔案即可

(待續)

XML的格式修飾及應用

css語法 宣告樣式表 標記名 插入內部css 指定使用css 樣式表 或者 根元素 xmlns html 命名空間 樣式表 元素 引用外部css 將使用的css檔案宣告,其中 mycss.css 為使用的css檔案 注意css的目錄 宣告引數實體語法 引用引數實體 引數實體名 只能在外部dtd裡 ...

php 怎樣通過php程式返回xml格式的資料

define in d 1 require once dirname dirname file config.inc.php if defined in d die access denied header content type text xml header expires mon,26 ju...

分析 魔獸爭霸3的MPQ檔案及模型格式分析

1 魔獸爭霸3的模型資料都被打包壓縮在 mpq裡,可以通過sfmpq static.lib提供的介面獲取相應的資料段控制代碼 mpqhandle 2 讀取mpq時,首先要知道這個mpq裡有多少個被打了包的檔案數目以及每個檔案的名字,可以通過sfmpq static.lib的 sfileopenfil...