当前位置: 首页 > article >正文

JPEG文件格式分析及举例验证


目录

一、JPEG文件简介

二、JPEG文件格式分析

2.1 JPEG文件的段结构

2.2 JPEG文件的段类型

2.2.1 SOI文件头

2.2.2 APP0图像识别信息

2.2.3 DQT定义量化表

2.2.4 SOF0图像基本信息

2.2.5 DHT定义Huffman表

2.2.6 SOS扫描行开始

2.2.7 EOI文件尾

2.2.8 其他段

三、JPEG图片举例分析

3.1 SOI文件头

3.2 APP0图像识别信息

3.3 DQT定义量化表

3.4 SOF0图像基本信息

3.5 DHT定义Huffman表 

3.6 SOS扫描行开始 

3.7 EOI文件尾

3.8 DRI定义重新开始 (其他段)


一、JPEG文件简介

        JPEG( Joint Photographic Experts Group)即联合图像专家组,是用于连续色调静态图像压缩的一种标准,文件后缀名为.jpg或.jpeg,是最常用的图像文件格式。其主要是采用预测编码(DPCM)、离散余弦变换(DCT)以及熵编码的联合编码方式,以去除冗余的图像和彩色数据,属于有损压缩格式,它能够将图像压缩在很小的储存空间,一定程度上会造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量降低,如果追求高品质图像,则不宜采用过高的压缩比例。

来源:百度百科

JPEG和JPG的联系:JPEG是一种文件格式,其常用的文件后缀名为.jpg和.jpeg。JPG只能做文件后缀名,而JPEG是文件格式,也可以是后缀名(扩展名)。

二、JPEG文件格式分析

JPEG图片格式存储结构:SOI(文件头)+APP0(图像识别信息)+ DQT(定义量化表)+ SOF0(图像基本信息)+ DHT(定义Huffman表) + DRI(定义重新开始间隔)+ SOS(扫描行开始)+ EOI(文件尾)

注:粗体字部分是一个文件必须拥有的

2.1 JPEG文件的段结构

JPEG文件是由若干个段构成,当JPEG每个段的信息完备,则该JPEG文件可以被打开。正因为JPEG文件是由段组成,那么JPEG文件的每个段中一定包含该段信息的一些标识。

因此我们有段的一般结构:

段的一般结构
名称字节数数据说明
段标识1FF每个新段的开始标识
段类型10xXX类型编码
段长度20xXX包括段内容和段本身长度,不包括段标识和段类型
段内容≤65533字节

2.2 JPEG文件的段类型

JPEG文件必须有的段类型如下表:

段类型
名称标记码说明
SOID8文件头
EOID9文件尾
SOF0C0帧开始
SOF1C1帧开始
DHTC4定义Huffman表
SOSDA扫描行开始
DQTDB定义量化表
DRIDD定义重新开始间隔
APP0E0定义交换格式和图像识别信息
COMFE注释

注:段类型有30种,只有以上10种是必须被所有程序识别的。

接下来按照存储结构顺序来介绍各段类型

2.2.1 SOI文件头

SOI
名称字节数
段标识1FF
段类型1

D8

2.2.2 APP0图像识别信息

APP0
名称字节数说明
段标识1FF
段类型1E0
段长度20010如果有RGB缩略图则为16+3*n
(     以下为容      )

交换格式

54A46494600“JFIF”的ASCII码
主版本号1版本号
次版本号1版本号
密度单位1

0:无单位;1:点数每英寸;2:点数每厘米

X像素密度2水平方向密度
Y像素密度2垂直方向密度
缩略图X像素1缩略图水平方向数目
缩略图Y像素1缩略图水平像素数目
(如果缩略图X像素和缩略图Y像素均大于0才有下面内容)

RGB缩略图3*nn=缩略图总像素数

2.2.3 DQT定义量化表

DQT
名称字节数说明
段标识1FF
段类型1DB
段长度243其值=3+n
(     以下为容      )
QT信息10~3位:QT号;4~7位:QT精度,0:8bit,1字节;否为16bit,2字节
QTnn=64*QT精度的字节数

注:JPEG文件一般有两个DQT段,一个定义亮度,一个定义色度;一个DQT段可以包含多个QT,每个都有自己的信息字节。

2.2.4 SOF0图像基本信息

SOF0
名称字节数说明
段标识1FF
段类型1C0
段长度2

其值=8+组件数量*3

(     以下为容      )
样本精度18

每个样本位数

图片高度2
图片宽度2
组件数量131=灰度图,3=YCbCr/YIQ 彩色图,4=CMYK 彩色图
(以下每个组件占用3字节)
组件ID11=Y, 2=Cb, 3=Cr, 4=I, 5=Q
采样系数1

0~3位:垂直采样系数,4~7位:水平采样系数

量化表号1

2.2.5 DHT定义Huffman表

DHT
名称字节数说明
段标识1FF
段类型1C4
段长度2

其值=19+n(只有一个HT表时)

(     以下为容      )
HF信息10~3位:HT号;4位:HT类型,0=DC表,1=AC表;5~7位:必须为0
HT位表1616个数的和应该≤256
HT值表nn=表头16个数的和

注:一个DHT可以包含多个HT表,每个都有自己的信息字节。

2.2.6 SOS扫描行开始

SOS
名称字节数说明
段标识1FF
段类型1DA
段长度2

其值=6+2*扫描行内组件数量

(     以下为容      )
扫描行组件数量13必须在[1,4]中,通常为3
(以下每个组件占用2字节)
组件ID11=Y, 2=Cb, 3=Cr, 4=I, 5=Q
Huffman表号10~3位:AC表号;4~7位:DC表号
剩余三字节3 压缩图像资料(compressed image data)

2.2.7 EOI文件尾

EOI
名称字节数说明
段标识1FF
段类型1D9

2.2.8 其他段

(1)COM注释

COM
名称字节数说明
段标识1FF
段类型1FE
段长度2

其值=注释字符的字节数+2

段内容注释字符

(2)DRI定义重新开始间隔

DRI
名称字节数说明
段标识1FF
段类型1DD
段长度24

(     以下为容      )
开始间隔2n复位标记的间隔

三、JPEG图片举例分析

举例分析下图JPEG文件:

3.1 SOI文件头

SOI段信息

段信息:

段标识=FF、段类型=D8

3.2 APP0图像识别信息

APP0段信息

段信息:

段标识=FF、段类型=E0

段长度=00 01

交换格式=4A 46 49 46 00

主版本号=01,次版本号=01

密度单位=00

X像素密度=00 48

Y像素密度=00 48

缩略图X像素=00

缩略图Y像素=00

无RGB缩略图

3.3 DQT定义量化表

DQT段信息

段信息:

段标识=FF、段类型=DB

段长度=00 43

QT信息=01

QT内容:蓝色框部分

3.4 SOF0图像基本信息

SOF0段信息

段信息:

段标识=FF、段类型=C0

段长度=00 11

样本精度=08

图片高度=00 92

图片宽度=00 A0

组件数量=03

组件ID=01,采样系数=22,量化表号=00

组件ID=02,采样系数=11,量化表号=01

组件ID=03,采样系数=11,量化表号=01

3.5 DHT定义Huffman表 

DHT段信息

段信息:

段标识=FF、段类型=C4

段长度=00 B5

HT信息=10

HT位表为最后一个红框部分

HT值为表图中蓝框部分

3.6 SOS扫描行开始 

SOS段信息

段信息:

段标识=FF、段类型=DA

段长度=00 0C

组件数量=03

组件ID=01,Huffman表号=00

组件ID=02,Huffman表号=11

组件ID=03,Huffman表号=11

压缩图像资料=00 3F 00

3.7 EOI文件尾

EOI段信息

段信息:

段标识=FF、段类型=D9

3.8 DRI定义重新开始 (其他段)

DRI段信息

段信息:

段标识=FF、段类型=DD

段长度=00 04

开始间隔=00 0A

参考博客:

jpeg图片格式详解_huabiaochen的博客-CSDN博客_jpeg 图片

jpg文件格式分析 - 道慧-道道都会 - 博客园

JPEG解码——(3)文件头解析 - OnlyTime_唯有时光 - 博客园

http://www.lryc.cn/news/2415164.html

相关文章:

  • 使用CCProxy代理局域网上网
  • GCD详解,多种
  • 缠中说禅:缠非缠、禅非禅,枯木龙吟照大千(整理版)
  • pm2常用命令及pm2自启动
  • rollup - 构建原理及简易实现
  • Java 中正则表达式的详解
  • STM32开发(五)STM32F103 通信 —— CAN通信编程详解
  • mysql instr使用
  • ubuntu新手教程(从安装系统到驱动安装到环境搭建)
  • Kotlin-简约之美-进阶篇(十六):DSL原理解析
  • 一个完整的http协议中都包含什么?
  • SQLServer附加数据库5120错误
  • 快速剖析贪心算法(C语言)
  • MVC介绍
  • android xvideo app,xvideo downloader and player
  • 大数据入门系列 3:全网最全,Ubuntu 安装 VMware Tools 完整步骤及需要注意的问题_ubuntu中怎么检测vmware tools是否安装好
  • makefile基础知识
  • JDK安装配置教程(保姆级)
  • 【ViT系列(2)】ViT(Vision Transformer)代码超详细解读(Pytorch)
  • OPC基本知识介绍——什么是OPC
  • Tornado介绍
  • Nacos篇五 - Nacos集群(Linux下standalone模式和cluster模式)
  • 全面文档格式处理工具Aspose最新中文教程指南请查收!
  • LTspice基础教程-007.voltage电压源基本设置
  • 了解函数递归
  • 微信小程序weui的使用
  • 2 DOS命令
  • Tomcat部署及多实例(一)
  • c语言md5函数 linux,【转】MD5校验C语言实现源代码
  • 一文详解单例模式以及原理分析