aspose.info
ZH

JPEG - 图像文件格式

更新于

什么是 JPEG 文件?

JPEG 是一种使用有损压缩方法保存的图像格式。作为压缩的结果,输出图像是存储大小和图像质量之间的权衡。用户可以调整压缩级别以达到所需的质量级别,同时减小存储大小。如果对图像应用 10:1 压缩,则对图像质量的影响可以忽略不计。压缩值越高,图像质量的劣化程度越高。

文件格式规范##

JPEG 图像文件格式由联合图像专家组标准化,因此名称为 JPEG。该格式一直是在网络上存储和传输照片图像的选择。几乎所有操作系统现在都有支持 JPEG 图像可视化的查看器,这些图像通常也以 JPG 扩展名存储。甚至网络浏览器也支持 JPEG 图像的可视化。在进入 JPEG 文件格式规范之前,需要提及 JPEG 创建所涉及的步骤的总体过程。

JPEG 压缩步骤

**转换:**彩色图像从RGB转换为亮度/色度图像(眼睛对亮度敏感,而不是色度,因此色度部分会丢失很多数据,因此可以高度压缩。

下采样: 下采样是针对有色分量而非亮度分量进行的。下采样以水平 2:1 和垂直 1:1 的比率进行(2h 1 V)。因此,由于未触摸“y"分量,因此图像尺寸减小,图像质量没有明显损失。

按组组织: 每个颜色分量的像素被组织成 8×2 像素的组,称为“数据单元",如果行数或列数不是 8 的倍数,则底行和最右边的列是重复的。

**离散余弦变换:**离散余弦变换 (DCT) 然后应用于每个数据单元以创建 8×8 变换分量图。由于计算机算术的精度有限,DCT 涉及一些信息丢失。这意味着即使没有地图,图像质量也会有一些损失,但通常很小。

量化: 数据单元中的 64 个变换分量中的每一个都除以一个称为“量化系数 (QC)“的单独数字,然后四舍五入为整数。这是信息丢失不可挽回的地方,大质量控制会导致更多损失。通常,大多数 JPEG 实现允许使用 JPEG 标准推荐的 QC 表。

编码: 使用 RLE 和 Huffman 编码的组合对每个数据单元的 64 个量化变换系数(现在是整数)进行编码。

**添加标题:**最后一步添加标题和所有使用的JPEG参数并输出结果。

JPEG 解码器使用相反的步骤从压缩图像生成原始图像。

文件结构###

JPEG 图像表示为一系列片段,其中每个片段都以标记开头。每个标记都以 0xFF 字节开头,后跟标记标志以表示标记的类型。标记后跟的有效负载因标记类型而异。常见的 JPEG 标记类型如下所列:

简称字节有效负载名称评论
SOI0xFF, 0xD8无图像开始
S0F00xFF, 0xC0可变大小帧开始
S0F20xFF, 0xC2可变大小从帧开始
DHT0xFF, 0xC4可变大小定义霍夫曼表
DQT0xFF, 0xDB可变大小定义量化表
DRI0xFF, 0xDD4 字节定义重启间隔
SOS0xFF, 0xDA可变大小扫描开始
RSTn0xFF, 0xD//n//(/zh//n//#0..7)无重启
APPn0xFF, 0xE//n//可变大小特定于应用
COM0xFF, 0xFE可变大小评论
EOI0xFF, 0xD9无图像结尾

在熵编码数据中,在任何 0xFF 字节之后,编码器会在下一个字节之前插入一个 0x00 字节,这样就不会出现不打算使用的标记,从而防止帧错误。解码器必须跳过这个 0x00 字节。这种技术称为 字节填充(参见 JPEG 规范第 F.1.2.3 节),仅适用于熵编码数据,不适用于标记有效负载数据.但是请注意,熵编码数据有一些自己的标记;特别是重置标记(0xD0 到 0xD7),它们用于隔离独立的熵编码数据块以允许并行解码,并且编码器可以定期插入这些重置标记(尽管并非所有编码器都这样做)。

另请参阅