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

解析:

  1. FF C4 Haffman表起始标识
  2. 00 1F 数据长度为31
  3. 00 表示第一个DHT表,类型为DC,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

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

131

16

 

C9

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vfdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值