jpg图片解码详细过程
图片数据
解码过程
1.开始标记
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 01 00 01 00 00
这部分是图片的开始,包含SOI,start of image(FF D8),JFIF,版本号之类的,这部分对后面解压没什么作用,这里不做介绍
2.量化表
地址:0x00000014
数据:FF DB 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0A 0C 14 0D 0C 0B 0B 0C 19 12 13 0F 14 1D 1A 1F 1E 1D 1A 1C 1C 20 24 2E 27 20 22 2C 23 1C 1C 28 37 29 2C 30 31 34 34 34 1F 27 39 3D 38 32 3C 2E 33 34 32
解析:
(1) FF DB 量化表(QT)的标识
(2)00 43 QT的长度:67
(3)00 QT信息,高4位:0,QT精度为8位,否则16位;
低4位:0,QT号,有两张QT,亮度和色度
(4)64字节数据为8*8的QT内容,从左上角往右下角排列
16进制:
十进制:
图像信息
地址:0x0000009E
数据:FF C0 00 11 08 00 95 00 E3 03 01 22 00 02 11 01 03 11 01
解析:
(1)FF C0 start of frame 0起始标识
(2)00 11 数据长度为17
(3)08 数据精度,表示每个颜色每个像素的位数,通常是8
(4)00 95 图片高度:149
(5)00 E3 图片宽度:227
(6)03 通道数(component),灰度图为1,YCbCr/YIQ彩色图是3,CNWK彩色图是4
(7)01 22 00
02 11 01
03 11 01
(7)是每个通道的参数,这里有3组,每组3个字节:第1个字节01是component ID,第2个字节0-3bit是垂直采样系数,4-7bit是水平采样系数,第3个字节00量化表编号
Haffman表
生成规则:
(a)第一个编码的数字必定为0;如果第一个编码的位数为1,就被编码为0;如果第一个编码的位数为2,就被编码为00;如果第一个编码的位数为3,就被编码为000。
(b)从第二个编码开始,如果它和它前面编码具有相同的位数,则当前编码是它前面的编码加1;如果它的编码位数比它前面的编码位数大,则当前编码时它前面的编码加1之后再在后面添加若干个0,直到满足编码位数的长度为止。
地址:0x000000B1
数据:FF C4 00 1F 00 00 01 05 01 01 01 01 01 01 00 00 00 00 00 00 00 00 01 02 03 04 05 06 07 08 09 0A 0B
解析:
- FF C4 Haffman表起始标识
- 00 1F 数据长度为31
- 00 表示第一个DHT表,类型为DC,ID为0,低4位是 HT ID 号,第5位是 HT 表类型标记,再高三位是为0
- 后面的16个字节数据表示每个编码组中有几个代码,然后是对应保存的值
组号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
个数 |
00 |
01 |
05 |
01 |
01 |
01 |
01 |
01 |
01 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
即Haffman表为:
序号 |
码字长度 |
码字(二进制) |
权值(数据位数) |
0 |
2 |
00 |
0 |
1 |
3 |
010 |
1 |
2 |
3 |
011 |
2 |
3 |
3 |
100 |
3 |
4 |
3 |
101 |
4 |
5 |
3 |
110 |
5 |
6 |
4 |
1110 |
6 |
7 |
5 |
11110 |
7 |
8 |
6 |
111110 |
8 |
9 |
7 |
1111110 |
9 |
10 |
8 |
11111110 |
10 |
11 |
9 |
111111110 |
11 |
地址:0x000000D2
数据:FF C4 00 B5 10 00 02 01 03 03 02 04 03 05 05 04 04 00 00 01 7D 01 02 03 00 04 11 05 12 21 31 41 06 13 51 61 07 22 71 14 32 81 91 A1 08 23 42 B1 C1 15 52 D1 F0 24 33 62 72 82 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7 E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
(1)FF C4 Haffman表起始标识
(2)00 B5 数据长度为181
(3)10 表示第一个DHT表,类型为AC,ID为0,低4位是 HT ID 号,第5位是 HT 表类型标记,再高三位是为0
(4)后面的16个字节数据表示每个编码组中有几个代码,然后是对应保存的值
组号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
个数 |
00 |
02 |
01 |
03 |
03 |
02 |
04 |
03 |
05 |
05 |
04 |
04 |
00 |
00 |
01 |
7D |
0 |
2 |
1 |
3 |
3 |
2 |
4 |
3 |
5 |
5 |
4 |
4 |
0 |
0 |
1 |
125 |
即Haffman表为:
序号 |
码字长度 |
码字(二进制) |
权值(数据位数)(16进制) |
0 |
2 |
00 |
01 |
1 |
2 |
01 |
02 |
2 |
3 |
100 |
03 |
3 |
4 |
1010 |
00 |
4 |
4 |
1011 |
04 |
5 |
4 |
1100 |
11 |
6 |
5 |
11010 |
05 |
7 |
5 |
11011 |
12 |
8 |
5 |
11100 |
21 |
9 |
6 |
111010 |
31 |
10 |
6 |
111011 |
41 |
11 |
7 |
1111000 |
06 |
12 |
7 |
1111001 |
13 |
13 |
7 |
1111010 |
51 |
14 |
7 |
1111011 |
61 |
15 |
8 |
11111000 |
07 |
16 |
8 |
11111001 |
22 |
17 |
8 |
11111010 |
71 |
18 |
9 |
111110110 |
14 |
19 |
9 |
111110111 |
32 |
20 |
9 |
111111000 |
81 |
21 |
9 |
111111001 |
91 |
22 |
9 |
111111010 |
A1 |
23 |
10 |
1111110110 |
08 |
24 |
10 |
1111110111 |
23 |
25 |
10 |
1111111000 |
42 |
26 |
10 |
1111111001 |
B1 |
27 |
10 |
1111111010 |
C1 |
28 |
11 |
11111110110 |
15 |
29 |
11 |
11111110111 |
52 |
30 |
11 |
11111111000 |
D1 |
31 |
11 |
11111111001 |
F0 |
32 |
12 |
111111110100 |
24 |
33 |
12 |
111111110101 |
33 |
34 |
12 |
111111110110 |
62 |
35 |
12 |
111111110111 |
72 |
36 |
15 |
111111111000000 |
82 |
37 |
16 |
1111111110000010 |
09 |
38 |
16 |
1111111110000011 |
0A |
39 |
16 |
1111111110000100 |
16 |
40 |
16 |
1111111110000101 |
17 |
41 |
16 |
1111111110000110 |
18 |
42 |
16 |
1111111110000111 |
19 |
43 |
16 |
1111111110001000 |
1A |
44 |
16 |
1111111110001001 |
25 |
45 |
16 |
1111111110001010 |
26 |
46 |
16 |
1111111110001011 |
27 |
47 |
16 |
1111111110001100 |
28 |
48 |
16 |
1111111110001101 |
29 |
49 |
16 |
1111111110001110 |
2A |
50 |
16 |
1111111110001111 |
34 |
51 |
16 |
1111111110010000 |
35 |
52 |
16 |
1111111110010001 |
36 |
53 |
16 |
1111111110010010 |
37 |
54 |
16 |
1111111110010011 |
38 |
55 |
16 |
39 |
|
56 |
16 |
3A |
|
57 |
16 |
43 |
|
58 |
16 |
44 |
|
59 |
16 |
45 |
|
60 |
16 |
46 |
|
61 |
16 |
47 |
|
62 |
16 |
48 |
|
63 |
16 |
49 |
|
64 |
16 |
4A |
|
65 |
16 |
53 |
|
66 |
16 |
54 |
|
67 |
16 |
55 |
|
68 |
16 |
56 |
|
69 |
16 |
57 |
|
70 |
16 |
58 |
|
71 |
16 |
59 |
|
72 |
16 |
5A |
|
73 |
16 |
63 |
|
74 |
16 |
64 |
|
75 |
16 |
65 |
|
76 |
16 |
66 |
|
77 |
16 |
67 |
|
78 |
16 |
68 |
|
79 |
16 |
69 |
|
80 |
16 |
6A |
|
81 |
16 |
73 |
|
82 |
16 |
74 |
|
83 |
16 |
75 |
|
84 |
16 |
76 |
|
85 |
16 |
77 |
|
86 |
16 |
78 |
|
87 |
16 |
79 |
|
88 |
16 |
7A |
|
89 |
16 |
83 |
|
90 |
16 |
84 |
|
91 |
16 |
85 |
|
92 |
16 |
86 |
|
93 |
16 |
87 |
|
94 |
16 |
88 |
|
95 |
16 |
89 |
|
96 |
16 |
8A |
|
97 |
16 |
92 |
|
98 |
16 |
93 |
|
99 |
16 |
94 |
|
100 |
16 |
95 |
|
101 |
16 |
96 |
|
102 |
16 |
97 |
|
103 |
16 |
98 |
|
104 |
16 |
99 |
|
105 |
16 |
9A |
|
106 |
16 |
A2 |
|
107 |
16 |
A3 |
|
108 |
16 |
A4 |
|
109 |
16 |
A5 |
|
110 |
16 |
A6 |
|
111 |
16 |
A7 |
|
112 |
16 |
A8 |
|
113 |
16 |
A9 |
|
114 |
16 |
AA |
|
115 |
16 |
B2 |
|
116 |
16 |
B3 |
|
117 |
16 |
B4 |
|
118 |
16 |
B5 |
|
119 |
16 |
B6 |
|
120 |
16 |
B7 |
|
121 |
16 |
B8 |
|
122 |
16 |
B9 |
|
123 |
16 |
BA |
|
124 |
16 |
C2 |
|
125 |
16 |
C3 |
|
126 |
16 |
C4 |
|
127 |
16 |
C5 |
|
128 |
16 |
C6 |
|
129 |
16 |
C7 |
|
130 |
16 |
C8 |
|
jpg图片解码详细过程相关推荐
- ffmpeg编解码详细过程
1. 注册所有容器格式和CODEC:av_register_all() 2. 打开文件:av_open_input_file() 3. 从文件中提取流信息:av_find_stream_info() ...
- Yolov5自定义图片训练测试及模型调优(详细过程)
Yolov5自定义图片训练测试及模型调优(详细过程) 1. 图像数据获取.标注 2. 数据集划分及准备 3. 配置训练参数,准备训练: 3.1 修改data/训练配置xxx.yaml文件: 3.2 修 ...
- 【PyTorch】构造VGG19网络进行本地图片分类(超详细过程)——项目介绍
本篇博客主要解决以下3个问题: 如何自定义网络(以VGG19为例). 如何自建数据集并加载至模型中. 如何使用自定义数据训练自定义模型. 第一篇:[PyTorch]构造VGG19网络进行本地图片分类( ...
- 从输入网址到页面呈现的详细过程
从输入网址到页面呈现的详细过程 面试题经典题目,简要回答如下: a.域名解析 b.发起TCP连接的三次握手 c.建立TCP连接后发起http请求 d.服务端响应http请求,返回响应报文 e.浏览器页 ...
- 1.基于S5PV210的图片解码播放器(详解)
有道云笔记详细地址: 文档:图片解码播放器小项目(详解).note 链接:http://note.youdao.com/noteshare?id=9f9a43ac5ec6828cf467940dfa1 ...
- Win7安装64位CentOS 6.4双系统详细过程
原文连接Win7安装64位CentOS 6.4双系统详细过程 本文是在两篇文章整合而成.分别是: Mr.Johness的 最清晰细致的教程!一步步教你打造Win7+CentOS双系统 和 cjh326 ...
- Ospf在广播网络中建立邻居关系的详细过程
Ospf 在广播网络中建立邻居关系的详细过程 目的:观察在广播网络中,OSPF建立邻接关系的过程 拓扑及设备需求 拓扑: 图片1 设备需求:3台路由器,ios版本为12.2 需求:配置3台路由器的以太 ...
- Keil(MDK-ARM-STM32)系列教程(一)_新建软件工程详细过程
Ⅰ.写在前面 本文使用目前(2016年11月)最新版本Keil(MDK-ARM)V5.21a开发环境.以STM32的处理器为例给大家讲述新建一个软件工程的详细过程. Keil(MDK-ARM)V4和V ...
- linux php和java环境变量配置_java_linux配置java环境变量详细过程,直接上实现过程:
一. 解压安 - phpStudy...
linux配置java环境变量详细过程 直接上实现过程: 一. 解压安装jdk在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-lin ...
最新文章
- shell 去掉字符串中的字母
- php mysql 数据回滚,PHP mysql事务回滚操作实例_PHP教程
- java 前端页面传过来的值怎么防止篡改_答对这40道经典web前端面试题,想不拿到offer都难!...
- 用Unity实现传送门效果(一)
- 巧用 Lazy 解决.NET Core中的循环依赖关系
- 第五十八期:从0到1 手把手教你建一个区块链
- 程序员九重镜界,很老的今天刚刚翻出来
- python百钱买百鸡问题答案_PHP/Python---百钱百鸡简单实现及优化
- 软考信息安全工程师学习笔记目录
- flask-mail异步发送邮件_异步、定时、邮件任务
- Druid monitor中数据源只显示() property for user to setup(已解决)
- 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面
- RabbitMQ的工作模式及消息顺序性的保证
- MAC装虚拟机显示打不开 /dev/vmmon: 断裂管道 请确保已载入内核模块 ’vmmon’
- 百度地图api根据地图缩放等级显示不同的marker点,功能二
- 公司“内部管理混乱,工作很难开展”!
- java 使用class转型_java中向上转型(upcast)和向下转型(downcast)
- 什么是VOIP和SIP?
- 帝企鹅变形记:开放与封闭 马化腾将左右下半生
- vue2+electron 给大家说个相声