图像JPEG&EXIF格式介绍(二)

2.3、IFD:Image file directory图像文件路径

继续接着上一节介绍IFD相关的东西

IFD的directory entry结构是怎样的呢

          从上面可知,前2个字节是ExifTag num号,接着2个字节是数据格式DataFormat(Ulong),后面4个字节是components个数,最后4个字节是数据值或数据值的偏移量。

IFD的数据格式情况如下,rational为小数值,包含两个整个值,第一个是分子,第二个是分母;上大面的例子中是ulong数据类型。

Value123456
Formatunsigned byteascii stringsunsigned shortunsigned longunsigned rationalsigned byte
Bytes/component112481
Value789101112
Formatundefinedsigned shortsigned longsigned rationalsingle floatdouble float
Bytes/component124848

通过“Bytes/component”值大小乘以components个数可以得到整个数据大小,若是数据大小小于4个字节,dirEntry项的最后4字节写入的是tag数据值,否则就是数据的偏移量大小。下面就是一个大于4个字节的例子,数据格式类型是5,即“Bytes/component”是8,而components个数为1,其乘积大小超过4字节,从而采用写入偏移量值,406+0x0c("II"地址)+1=0x01A2,该地址里的内容是72,代表Y分辨率是72dpi。

         IFD0问题包含一个特定Tag为Exif Offset(0x8769),在这个entry项的最后4字节中存放着Exif SubIFD的偏移量,Exif SubIFD也是IFD格式的数据结构,包含有一些数码信息如ISO,光圈Fn,曝光时间等等。

 从下面看出Exif SubIFD里的dirEntry[5]项是光圈Fn信息,值是f2.2。

 2.4、其他信息

        Exif格式包含thumbnail image,一般紧临IFD1存放。thumbnail图像有3种格式,JPEG格式(JPEG使用YCbCr),RGB TIFF格式,YCbCr TIFF格式。如果IFD1里的Compression(0x0103)tag值是6,thumbnail image格式是JPEG,大部Exif image是使用JPEG格式给thumbnail,在这种情况下,从IFD1里的ThumbnailOffset(0x0201)tag里可以获取到thumbnail的偏移量,从ThumbnailLength(0x0202)tag里可以获取thumbnail的大小,数据格式是JPEG格式,即是从0xFFD8开始,到0xFFD9结束。

2.5、JPEG格式 的结构

        前面有简单介绍过,JPEG格式是以0xFFD8 SOI marker开始,以0xFFD9 EOI marker结束,中间会有其他的marker及数据来组成,如下图所示,Exif使用app1 marker字段,定义量化表使用DQT marker字段,而像app5不知名的marker字段则是软件自定义的部分内容,如一些tuning数据,awb,ae参数等或其他的数据。 SOS marker字段(0xFFDA)为Start of scan的意思,在其后面就是jpeg image数据(scanData marker字段),最后就是EOI marker字段。

 我们来看下其他marker字段的各个函数

Code assignment Symbol Description
Start of Frame markers, non-differential, Huffman coding
X’FFC0’SOF0Baseline DCT
X’FFC1’SOF1Extended sequential DCT
X’FFC2’SOF2Progressive DCT
X’FFC3’SOF3Lossless (sequential)
Start of Frame markers, differential, Huffman coding
X’FFC5’SOF5Differential sequential DCT
X’FFC6’SOF6Differential progressive DCT
X’FFC7’SOF7Differential lossless (sequential)
Start of Frame markers, non-differential, arithmetic coding
X’FFC8’JPGReserved for additional JPEG extensions
X’FFC9’SOF9Extended sequential DCT
X’FFCA’SOF10Progressive DCT
X’FFCB’SOF11Lossless (sequential)
Start of Frame markers, differential, arithmetic coding
X’FFCD’SOF13Differential sequential DCT
X’FFCE’SOF14Differential progressive DCT
X’FFCF’SOF15Differential lossless (sequential)
Huffman table specification
X’FFC4’ DHT Define Huffman table(s)
Arithmetic coding conditioning specification
X’FFCC’ DAC Define arithmetic coding conditioning(s)
Restart interval termination
X’FFD0’ through X’FFD7’ RSTm* Restart with modulo 8 count “m”
Other markers
X’FFD8’SOI*Start of image
X’FFD9’EOI*End of image
X’FFDA’SOSStart of scan
X’FFDB’DQTDefine quantization table(s)
X’FFDC’DNLDefine number of lines
X’FFDD’DRIDefine restart interval
X’FFDE’DHPDefine hierarchical progression
X’FFDF’EXPExpand reference component(s)
X’FFE0’ through X’FFEF’APPnReserved for application segments
X’FFF7’ through X’FFFD’JPGnReserved for additional JPEG extensions
X’FFFE’COMComment
Reserved markers
X’FF01’TEM*For temporary private use in arithmetic coding
X’FF02’ through X’FFBF’RESReserved
Version 1 extensions
X’FFF0’VERVersion
X’FFF1’DTIDefine tiled image
X’FFF2’DTTDefine tile
X’FFF3’SRFSelectively refined frame
X’FFF4’SRSSelectively refined scan
X’FFF5’DCRDefine component registration
X’FFF6’DQSDefine quantizer scale selection

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值