分享
 
 
 

EXIF格式分析及通过XML处理(3)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

EXIF格式分析及通过XML处理

猛禽[Mental Studio](个人专栏)(BLOG)

http://mental.mentsu.com

下面是一个典型的EXIF JPEG文件格式分析结果(源文件为一张用Nikon CoolPixel 775相机拍摄的照片,所用的EXIF版本是2.1,与2.2版差别不大):

JPEG SOI : FF D8 // 图片起始

JPEG APP1: FF E1

APP1 Size : 1C 45 // 注意:前面这三个WORD都是big endian的

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文件即可

(待续)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有