jpeg 格式解析
JPEG文件由两部分组成:标记码和压缩数据。JPEG图像所有信息都由标记码记录,标记码之间用若干个0xFF分开。
JPEG图片格式组成部分:SOI(文件头)+APP0(图像识别信息)+ DQT(定义量化表)+ SOF0(图像基本信息)+ DHT(定义Huffman表) + DRI(定义重新开始间隔)+ SOS(扫描行开始)+ EOI(文件尾)
jpeg数据分析
00000000h: FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 01 ; ??.JFIF......
00000010h: 00 01 00 00 FF E1 18 D6 45 78 69 66 00 00 49 49 ; ....?諩xif..II
00000020h: 2A 00 08 00 00 00 0A 00 0F 01 02 00 10 00 00 00 ; *...............
00000030h: 86 00 00 00 10 01 02 00 0A 00 00 00 96 00 00 00 ; ?..........?..
00000040h: 12 01 03 00 01 00 00 00 01 00 00 00 1A 01 05 00 ; ................
00000050h: 01 00 00 00 A0 00 00 00 1B 01 05 00 01 00 00 00 ; ....?..........
00000060h: A8 00 00 00 28 01 03 00 01 00 00 00 02 00 00 00 ; ?..(...........
00000070h: 31 01 02 00 06 00 00 00 B0 00 00 00 32 01 02 00 ; 1.......?..2...
00000080h: 14 00 00 00 B6 00 00 00 13 02 03 00 01 00 00 00 ; ....?..........
00000090h: 01 00 00 00 69 87 04 00 01 00 00 00 CA 00 00 00 ; ....i?.....?..
000000a0h: E0 06 00 00 46 4C 49 52 20 53 79 73 74 65 6D 73 ; ?..FLIR Systems
000000b0h: 20 41 42 00 46 4C 49 52 20 54 36 33 30 00 48 00 ; AB.FLIR T630.H.
000000c0h: 00 00 01 00 00 00 48 00 00 00 01 00 00 00 35 2E ; ......H.......5.
000000d0h: 33 2E 33 00 32 30 32 30 3A 30 35 3A 32 35 20 32 ; 3.3.2020:05:25 2
000000e0h: 30 3A 34 35 3A 33 35 00 0E 00 9A 82 05 00 01 00 ; 0:45:35...殏....
000000f0h: 00 00 78 01 00 00 00 90 02 00 04 00 00 00 30 32 ; ..x....?.....02
00000100h: 32 30 03 90 02 00 14 00 00 00 80 01 00 00 04 90 ; 20.?.....€....?
00000110h: 02 00 14 00 00 00 94 01 00 00 01 91 07 00 04 00 ; ......?...?...
00000120h: 00 00 00 03 02 01 06 92 05 00 01 00 00 00 A8 01 ; .......?.....?
00000130h: 00 00 0A 92 05 00 01 00 00 00 B0 01 00 00 7C 92 ; ...?.....?..|?
00000140h: 07 00 FE 04 00 00 B8 01 00 00 00 A0 02 00 04 00 ; ..?..?...?...
00000150h: 00 00 30 31 30 30 01 A0 03 00 01 00 00 00 01 00 ; ..0100.?.......
00000160h: 00 00 02 A0 03 00 01 00 00 00 80 02 00 00 03 A0 ; ...?.....€....?
00000170h: 03 00 01 00 00 00 E0 01 00 00 04 A4 05 00 01 00 ; ......?...?...
00000180h: 00 00 B6 06 00 00 20 A4 02 00 21 00 00 00 BE 06 ; ..?.. ?.!...?
00000190h: 00 00 00 00 00 00 0A 00 00 00 F4 01 00 00 32 30 ; ..........?..20
000001a0h: 32 30 3A 30 35 3A 32 35 20 32 30 3A 34 35 3A 33 ; 20:05:25 20:45:3
000001b0h: 35 00 32 30 32 30 3A 30 35 3A 32 35 20 32 30 3A ; 5.2020:05:25 20:
SOI
SOI 标记码开头
FF D8
JFIF应用数据块 APP0
FF E0 #开始标记位
00 01 #2个字节,app0 的长度
4A 46 49 46 20 #5个字节 格式识别码:JFIF
01 01 #2个字节 版本号:1.1
00 #1个字节 单位密度
00 01 # 2个字节 水平方向像素密度
00 01 # 2个字节 垂直方向像素密度
标记结构 | 字节数 | 意义 | 对应数据(十六进制) |
---|---|---|---|
0xFF | 1个 | 段标识 | FF |
0xE0 | 1个 | 段类型 | E0 |
Lp | 2个 | APP0标记码长度 | 00 10(由此看出该标记码长度为16字节) |
Identifier | 5 个 | 识别码 | 4A 46 49 46 00(“JFIF”) |
Version | 2个 | 版本号 | 01 01 |
Units | 1个 | 单位密度 | 00 |
Xdensity | 2个 | 水平方向像素密度 | 00 01 |
Xdensity | 2个 | 垂直方向像素密度 | 00 01 |
Xthumbnail | 1个 | 单位密度 | 00 |
Ythumbnail | 1个 | 单位密度 | 00 |
APP1
Exif使用TIFF格式来存储数据
标记结构 | 字节数 | 意义 | 对应数据(十六进制) |
---|---|---|---|
0xFF | 1个 | 段标识 | FF |
0xE1 | 1个 | app1 | E1 |
Lp | 2个 | 长度 | 18 D6 (3685) |
Identifier | 6个 | 是否使用了 Exif | 45 78 69 66(Exif) 00 00 |
Identifier | 8个 | TIFF Header | 4949(intel小端模式)2A00 08000000 (IFD 偏移量) |
ifd | 2个 | 图像文件目录个数 | 0A 00 |
IFD格式 TAG + TYPE + SIZE + VALUE
TYPE 数据格式对应的字节数如下:
value (TYPE 的值) | Format | Bytes/component (组成元素的字节数) |
---|---|---|
1 | unsigned byte | 1 |
2 | ascii strings | 1 |
3 | unsigned short | 2 |
4 | unsigned long | 4 |
5 | unsigned rational | 8 |
6 | signed byte | 1 |
7 | undefined | 1 |
8 | signed short | 2 |
9 | signed long | 4 |
10 | signed rational | 8 |
11 | single float | 4 |
12 | double float | 8 |
1."rational"表示一个分数,它包含两个signed/unsigned long integer值并且第一个为分子,第二个为分母。
- 组成元素的字节数 * SIZE >= 4个字节,则VALUE为偏移地址(即 TIFF Header 地址 + value),否则value为tag对应的数据。
1.FD
标记结构 | 字节数 | 意义 | 对应数据(十六进制) |
---|---|---|---|
IFD0 | 2个 | Tag | 0F 01 (Make 制造) |
IFD0 | 2个 | TYPE | 02 00 (ASCII) |
IFD0 | 4个 | SIZE | 10 00 00 00 ( 16*1 > 4 字节 ,下面四个字节为偏移量) |
IFD0 | 4个 | VALUE | 86 00 00 00 (从1e开始计算,偏移0x86个字节 (0x00000086+0x000001e)) |
tag 的内容如下:
000000a4h: 46 4C 49 52 20 53 79 73 74 65 6D 73 20 41 42 00 ; FLIR Systems AB