酒桌礼仪73301994Exif格式分析
2010-03-04 17:361133人阅读评论(4)收藏举报
大概翻译了一下,非常的粗糙,慢慢修正。请高手自动飘过~
因为做图像压缩时会损失相机写入的如光圈、快门等信息,所以自己写了个图像压缩小玩意,顺便研究了一下Exif。
原文地址:Exif file format
JPEG格式和标志
JPEG文件都是以十六进制'0xFFD8'开始,以'0xFFD9'结束。在JPEG数据中有像'0xFF**'这样的数据,这些被称为“标志”,它表示JPEG信息数据段。0xFFD8 表示SOI(Start of image 图像开始),0xFFD9表示EOI(End of image 图像结束)。这两个特殊的标志没有附加的数据,而其他的标志在标志后都带有附加的数据。基本的标志格式如下:
0xFF + 标志数字(1字节)+ 数据大小(2字节)+ 数据(n字节)
数据大小(2字节) 是大端顺序表示(Motorola方式),从高字节开始。请注意“数据”包含了数据大小的描述,如果一个标志为:
FF C1 00 0C
则表示标志0xFFC1有0x000C(十进制12)个字节的数据,但是数据的大小'12' 也包含了记录“数据大小”的字节,所以在0x000C 后面只有10个字节的数据量。
在JPEG格式中,一些标志描绘数据后,跟着的就是SOS(Start of stream 数据流开始)标志。在SOS标志之后,就是JPEG图像流,直到EOI标志终结。
SOI Marker
Marker XX size=SSSS
Marker YY size=TTTT
SOS Marker size=UUUU
Image stream
EOI Marker
FFD8
FFXX
SSSS
DDDD......
FFYY
TTTT
DDDD......
FFDA
UUUU
DDDD....
I I I I....
FFD9
Exif中使用的标志
从0xFFE0 ~ 0xFFEF 的标志是“应用程序标志”,在解码JPEG 图像的时候不是必需使用的。这些标志被用在用户应用中。例如:老款的Olympus(奥林巴斯)、canon(佳能)、casio(卡西欧)、Agfa(爱克发)的数码相机使用JFIF(JPEG档案交换格式)来存储相片的。JFIF使用APP0(0xFFE0)标志来插入数码相机的配置数据和缩略图的。
Exif也使用应用程序标志来插入数据,但是Exif使用APP1(0xFFE1)标志以避免和JFIF格式冲突。每个Exif文件格式都是从下面格式开始的:
SOI Marker
APP1 Marker
APP1 Data
Other Marker
FFD8
FFE1
SSSS 457869660000 TTTT......
FFXX SSSS DDDD......
从SOI(0xFFD8)标志开始,所以这是一个JPEG文件。后面随即跟着个一个APP1标志。所有的Exif数据都储存在APP1数据区中。在上表中的"SSSS" 部分表示APP1数据(Exif 数据区域)的大小。请注意其大小"SSSS"包括大小描述"SSSS"其本身。
APP1的数据从"SSSS"后开始。第一部分是特殊数据,使用ASCII字符"Exif"和两个字节的
0x00 ,它定义了是否使用Exif。
APP1标志数据之后,是其他JPEG标志。
Exif数据结构
大略的Exif数据结构(APP1)如下。它采用了"Intel"的小端字节顺序方案,且包含JPEG格式的缩略图。总体上,Exif数据是从ASCII字符"Exif"和2个字节的0x00开始,后面就是Exif的数据了。Exif使用TIFF格式来存储数据。想知道更多关于TIFF格式内容,请浏览" specification"。
FFE1
APP1 Marker
SSSS
APP1 Data
APP1 Data Size
45786966 0000
Exif Header
49492A00 08000000
TIFF Header
XXXX. . . .
IFD0 (main image)
Directory
LLLLLLLL
Link to IFD1
XXXX. . . .
Data area of IFD0
XXXX. . . .
Exif SubIFD
Directory
00000000
End of Link
XXXX. . . .
Data area of Exif SubIFD
XXXX. . . .
Interoper
酒桌礼仪 来自淘豆网www.taodocs.com转载请标明出处.