jpeg 格式解析
JPEG文件由兩部分組成:標記碼和壓縮數(shù)據(jù)。JPEG圖像所有信息都由標記碼記錄讨永,標記碼之間用若干個0xFF分開滔驶。
JPEG圖片格式組成部分:SOI(文件頭)+APP0(圖像識別信息)+ DQT(定義量化表)+ SOF0(圖像基本信息)+ DHT(定義Huffman表) + DRI(定義重新開始間隔)+ SOS(掃描行開始)+ EOI(文件尾)
jpeg數(shù)據(jù)分析
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應用數(shù)據(jù)塊 APP0
FF E0 ?#開始標記位
00 01 ? #2個字節(jié),app0 的長度
4A 46 49 46 20 ? #5個字節(jié) 格式識別碼:JFIF
01 01 ? #2個字節(jié) 版本號:1.1
00 ? #1個字節(jié) 單位密度
00 01 ? # 2個字節(jié) 水平方向像素密度
00 01 ? # 2個字節(jié) 垂直方向像素密度
標記結構 | 字節(jié)數(shù) | 意義 | 對應數(shù)據(jù)(十六進制) |
---|---|---|---|
0xFF | 1個 | 段標識 | FF |
0xE0 | 1個 | 段類型 | E0 |
Lp | 2個 | APP0標記碼長度 | 00 10(由此看出該標記碼長度為16字節(jié)) |
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格式來存儲數(shù)據(jù)
標記結構 | 字節(jié)數(shù) | 意義 | 對應數(shù)據(jù)(十六進制) |
---|---|---|---|
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個 | 圖像文件目錄個數(shù) | 0A 00 |
IFD格式 TAG + TYPE + SIZE + VALUE
TYPE 數(shù)據(jù)格式對應的字節(jié)數(shù)如下:
value (TYPE 的值) | Format | Bytes/component (組成元素的字節(jié)數(shù)) |
---|---|---|
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"表示一個分數(shù)卿闹,它包含兩個signed/unsigned long integer值并且第一個為分子揭糕,第二個為分母萝快。
- 組成元素的字節(jié)數(shù) * SIZE >= 4個字節(jié),則VALUE為偏移地址(即 TIFF Header 地址 + value)著角,否則value為tag對應的數(shù)據(jù)揪漩。
1.FD
標記結構 | 字節(jié)數(shù) | 意義 | 對應數(shù)據(jù)(十六進制) |
---|---|---|---|
IFD0 | 2個 | Tag | 0F 01 (Make 制造) |
IFD0 | 2個 | TYPE | 02 00 (ASCII) |
IFD0 | 4個 | SIZE | 10 00 00 00 ( 16*1 > 4 字節(jié) ,下面四個字節(jié)為偏移量) |
IFD0 | 4個 | VALUE | 86 00 00 00 (從1e開始計算,偏移0x86個字節(jié) (0x00000086+0x000001e)) |
tag 的內(nèi)容如下:
000000a4h: 46 4C 49 52 20 53 79 73 74 65 6D 73 20 41 42 00 ; FLIR Systems AB