JEPG图像文件结构

JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩图像格式,其文件结构遵循特定的规范。JPEG 文件通常以 .jpg.jpeg 为扩展名。其内部结构基于 标记(Markers)段(Segments) 的组合。


一、基本结构概述

JPEG 文件由一系列 标记段(Marker Segments) 构成,每个标记段以一个 两字节的标记(Marker) 开头,格式为 0xFF + 标记码(例如 0xFFD8 表示 SOI)。

主要组成部分:

  1. SOI(Start of Image)

    • 标记:0xFFD8
    • 表示 JPEG 图像的开始。
  2. APPn 段(Application-specific segments)

    • 标记:0xFFE00xFFEF(如 0xFFE0 是 APP0,常用于 JFIF 信息;0xFFE1 常用于 EXIF 数据)
    • 存放应用程序自定义数据,比如:
      • JFIF(JPEG File Interchange Format)头
      • EXIF(Exchangeable Image File Format)元数据(拍摄时间、相机型号、GPS 等)
  3. DQT(Define Quantization Table)

    • 标记:0xFFDB
    • 定义量化表,用于解码时反量化 DCT 系数。
  4. SOF(Start of Frame)

    • 标记:常见如 0xFFC0(Baseline DCT)、0xFFC2(Progressive DCT)等
    • 描述图像的基本参数,如:
      • 图像高度、宽度
      • 颜色分量数量(通常是 3:Y, Cb, Cr)
      • 每个分量的采样因子(如 4:2:0)
      • 每个分量使用的量化表编号
  5. DHT(Define Huffman Table)

    • 标记:0xFFC4
    • 定义霍夫曼编码表,用于熵解码。
  6. SOS(Start of Scan)

    • 标记:0xFFDA
    • 表示压缩图像数据的开始。
    • 包含:
      • 使用的分量列表
      • 对应的霍夫曼表编号
    • 之后就是实际的压缩图像数据(熵编码后的 DCT 系数)
  7. 压缩图像数据(Entropy-coded data)

    • 不以标记开头,但若出现 0xFF,后面会跟一个填充字节 0x00(称为 stuffing byte),避免误判为标记。
  8. EOI(End of Image)

    • 标记:0xFFD9
    • 表示 JPEG 图像结束。

二、典型 JPEG 文件结构顺序(Baseline JPEG)

复制代码
+------------------+
| SOI (0xFFD8)     |
+------------------+
| APP0 / APP1 ...  | ← 可选,包含 JFIF/EXIF 等
+------------------+
| DQT              | ← 一个或多个量化表
+------------------+
| SOF0 (0xFFC0)    | ← 基线 JPEG 的帧头
+------------------+
| DHT              | ← 一个或多个霍夫曼表
+------------------+
| SOS (0xFFDA)     |
+------------------+
| 压缩图像数据      | ← 可能包含 0xFF00 转义
+------------------+
| EOI (0xFFD9)     |
+------------------+

注意:某些 JPEG(如渐进式 JPEG)可能包含多个 SOS 段和多个扫描。


三、关键点说明

  • 所有标记都是大端序(Big-endian)

  • 标记长度字段 :除 SOI、EOI 和压缩数据外,大多数段在标记后紧跟一个 2 字节的长度字段 (包括长度字段本身),例如:

    复制代码
    FF C0 00 11 ...
          ↑↑------ 长度 = 0x0011 = 17 字节(包括这2字节)
  • 颜色空间 :JPEG 内部使用 YCbCr 色彩空间(即使原始图像是 RGB),通过色彩空间转换和子采样实现压缩。


四、示例:用十六进制查看 JPEG 头部

hex 复制代码
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48  ← SOI + APP0(JFIF)
00 48 00 00 FF DB 00 43 00 01 01 01 01 01 01 01  ← DQT
...
FF C0 00 11 08 02 80 01 E0 03 01 22 00 02 11 01  ← SOF0 (640x480)
...
FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 ...     ← SOS + 压缩数据
...
FF D9                                            ← EOI

五、参考资料

  • ISO/IEC 10918-1(ITU-T T.81):JPEG 标准文档
  • JPEG File Interchange Format (JFIF) specification
  • EXIF specification(由 JEITA 制定)

如需解析或生成 JPEG 文件,建议使用成熟的库(如 libjpeg、Pillow、OpenCV),因为手动处理霍夫曼编码、DCT 反变换等非常复杂。

如果你对某一部分(如 DHT 结构、SOS 后的数据流格式)感兴趣,我可以进一步展开说明。

相关推荐
还是大剑师兰特16 小时前
MySQL8.0 Windows完整安装教程
windows·mysql·大剑师
还是大剑师兰特1 个月前
VSCode 插件冲突导致崩溃、卡死、假死 全套根治方案
vscode·大剑师
还是大剑师兰特1 个月前
ThinkPad T490 Windows 自动修复失败完整解决步骤
windows·大剑师·t490
还是大剑师兰特1 个月前
二年级奥数(12) : 巧填符号+竖式数字谜
大剑师·二年级奥数
还是大剑师兰特1 个月前
二年级奥数(9):鸡兔同笼+ 归一问题
大剑师·二年级奥数
还是大剑师兰特1 个月前
二年级奥数(7):移多补少8题 + 和差入门8题 + 年龄问题8题
大剑师·二年级奥数
还是大剑师兰特2 个月前
Vite6 + Vue3 + TS 完整版标准配置模板
vite·大剑师·vite6配置
还是大剑师兰特2 个月前
小学三年级奥数完整知识点清单(分模块+必学内容+难度分级)
大剑师·三年级奥数·小学奥数
还是大剑师兰特2 个月前
Vue 3 Vapor Mode 超全详解
大剑师·vue3 vapor
还是大剑师兰特5 个月前
Vue3中vue-cropper详解与使用示例
大剑师·vue-cropper