📄 jpeg数据分析例子.txt
字号:
搞了几年的技术
发现最大的错误就是不愿意把自己学到的东西分享出来。
如果您觉得这个帮到您了,就多到我网站上帮需要帮忙的人
顺便帮我把网站上的广告点一下,这样我的网站就能开得更久了
JPEG数据分析例子
- 段的类型:
- ~~~~~~~~~
- *TEM = $01 可以忽略掉
- SOF0 = $c0 帧开始 (baseline JPEG), 细节附后
- SOF1 = $c1 dito
- SOF2 = $c2 通常不支持
- SOF3 = $c3 通常不支持
- SOF5 = $c5 通常不支持
- SOF6 = $c6 通常不支持
- SOF7 = $c7 通常不支持
- SOF9 = $c9 arithmetic 编码(Huffman 的一种扩展算法), 通常不支持
- SOF10 = $ca 通常不支持
- SOF11 = $cb 通常不支持
- SOF13 = $cd 通常不支持
- SOF14 = $ce 通常不支持
- SOF14 = $ce 通常不支持
- SOF15 = $cf 通常不支持
- DHT = $c4 定义 Huffman Table, 细节附后
- JPG = $c8 未定义/保留 (引起解码错误)
- DAC = $cc 定义 Arithmetic Table, 通常不支持
- *RST0 = $d0 RSTn 用于 resync, 通常被忽略
- *RST1 = $d1
- *RST2 = $d2
- *RST3 = $d3
- *RST4 = $d4
- *RST5 = $d5
- *RST6 = $d6
- *RST7 = $d7
-
- SOI = $d8 图片开始
- EOI = $d9 图片结束
- SOS = $da 扫描行开始, 细节附后
- DQT = $db 定义 Quantization Table, 细节附后
- DNL = $dc 通常不支持, 忽略
- DRI = $dd 定义重新开始间隔, 细节附后
- DHP = $de 忽略 (跳过)
- EXP = $df 忽略 (跳过)
-
- APP0 = $e0 JFIF APP0 segment marker (细节略)
- APP15 = $ef 忽略
- JPG0 = $f0 忽略 (跳过)
- JPG13 = $fd 忽略 (跳过)
- COM = $fe 注释, 细节附后
- 其它的段类型都保留必须跳过
- SOF0: Start Of Frame 0:
注意:
0xFF后跟大于0x00的值,是一个段的开始
0xFF后跟等于0x00的值,是数据,应该去掉0x00 如 0xFF 0x00 === 0xFF
注释是从数据行后开始到下一行数据的上一行为一块注释
/////////////////////////////////////////////////////////////////////////////////////////////
unsigned char Jpeg_File_data[60693] = {
0xFF, 0xD8, // 文件头 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) 图片开始
------------------------------------------------------------------------------------------------------------------
0xFF, 0xE0, // E0类型,APP0 = $e0 JFIF APP0 segment marker (细节略)
0x00, 0x10, // 该段长度为0x0010,包括长度这两个byte
0x4A, 0x46, 0x49, 0x46, 0x00, //JFIF.
0x01, 0x01, 0x00, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00,
------------------------------------------------------------------------------------------------------------------ 0xFF, 0xDB, // DQT = $db 定义 Quantization Table, 细节附后 $ff, $db (DQT)
0x00, 0x43, // 长度 (高字节, 低字节)
0x00, // QT 信息 (1 byte) -bit 0..3: QT 号(0..3, 否则错误) -bit 4..7: QT 精度, 0 = 8 bit, 否则 16 bit
// n 字节的 QT, n = 64*(精度+1)
// 备注:
// 一个单独的 DQT 段可以包含多个 QT, 每个都有自己的信息字节
// 当精度=1 (16 bit), 每个字都是高位在前低位在后
0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07, 0x07, 0x07, 0x09, 0x09, 0x08, 0x0A, 0x0C, 0x14,
0x0D, 0x0C, 0x0B, 0x0B, 0x0C, 0x19, 0x12, 0x13, 0x0F, 0x14, 0x1D, 0x1A, 0x1F, 0x1E, 0x1D, 0x1A,
0x1C, 0x1C, 0x20, 0x24, 0x2E, 0x27, 0x20, 0x22, 0x2C, 0x23, 0x1C, 0x1C, 0x28, 0x37, 0x29, 0x2C,
0x30, 0x31, 0x34, 0x34, 0x34, 0x1F, 0x27, 0x39, 0x3D, 0x38, 0x32, 0x3C, 0x2E, 0x33, 0x34, 0x32, 0xFF, 0xDB, // DQT = $db 定义 Quantization Table, 细节附后
0x00, 0x43,
0x01,
0x09, 0x09,0x09, 0x0C, 0x0B, 0x0C, 0x18, 0x0D, 0x0D, 0x18, 0x32, 0x21, 0x1C, 0x21, 0x32, 0x32,
0x32, 0x32,0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
0x32, 0x32,0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
0x32, 0x32,0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32,
------------------------------------------------------------------------------------------------------------------ 0xFF, 0xC0, // SOF0 = $c0 帧开始 (baseline JPEG), 细节附后 itu-t81.pdf第 38/186 页
0x00, 0x11, // 长度 (高字节, 低字节), 8+components*3
0x08, // 数据精度 (1 byte) 每个样本位数, 通常是 8 (大多数软件不支持 12 和 16)
0x02, 0xA2, // 图片高度 (高字节, 低字节), 如果不支持 DNL 就必须 >0
0x02, 0x9B, // 图片宽度 (高字节, 低字节), 如果不支持 DNL 就必须 >0
0x03, // components 数量(1 byte), 灰度图是 1, YCbCr/YIQ 彩色图是 3, CMYK 彩色图是 4
0x01,0x22, 0x00, // 每个 component: 3 bytes
0x02, // component id (1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q)
0x11, // 采样系数 (bit 0-3 vert., 4-7 hor.)
0x01, // quantization table 号
0x03, 0x11,0x01, ------------------------------------------------------------------------------------------------------------------ 0xFF, 0xC4, // DHT = $c4 定义 Huffman Table, 细节附后
0x00, 0x1F, // 长度 (高字节, 低字节)
0x00, // HT信息 (1 byte) -bit0..3:HT号(0..3,否则错误) -bit4:HT类型,0=DC table,1=AC table -bit5..7:必须是0
0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //16 bytes: 长度是 1..16 代码的符号数. 这 16 个数的和应该 <=256
//第 i 字节表示了 i 位长的 Huffman 代码的个数 (i= 1 到 16),这表的长度 (字节数) = 这 16 个数字之和
//对应字节就是对应 Haffman 代码等价数字
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x0A, 0x0B, //n bytes:一个包含了按递增次序代码长度排列的符号表 -(n=代码总数)
// 备注:
// 一个单独的 DHT 段可以包含多个 HT, 每个都有自己的信息字节
0xFF, 0xC4, // DHT = $c4 定义 Huffman Table, 细节附后
0x00, 0xB5,
0x10,
0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7D,
0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08, 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0,
0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28,
0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5,
0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2,
0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
0xF9, 0xFA, 0xFF, 0xC4, // DHT = $c4 定义 Huffman Table, 细节附后
0x00, 0x1F,
0x01,
0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0xFF, 0xC4, // DHT = $c4 定义 Huffman Table, 细节附后
0x00, 0xB5,
0x11,
0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77,
0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0,
0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34, 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26,
0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5,
0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3,
0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
0xF9, 0xFA, ------------------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -