2020-10-28

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值并且第一个为分子,第二个为分母。

  1. 组成元素的字节数 * 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

你可能感兴趣的:(2020-10-28)