JPEG 压缩是如何工作的?

用简单步骤解析高效图片压缩背后的原理

24. January 2025 作者 Bianca Palmer

JPEG 压缩是如何工作的?

你是否想过,为什么手机或相机拍完照后,照片能在几秒内就被保存为 JPEG,体积更小、加载更快,看起来却依然清晰?在这一切背后,其实有一套复杂的流程, 把体积巨大的图像文件压缩到原始大小的一小部分,同时仍保持较高画质。但这 究竟是如何实现的呢?在这里,我们将深入了解 JPEG 压缩并逐步拆解 每个步骤,用通俗易懂的方式帮你理解这个图像压缩过程。

什么是 JPEG?

JPEG (Joint Photographic Experts Group 的缩写)是最常见的图像格式之一。它是 存储数码照片的标准选择。JPEG 的关键特性是可以压缩图像文件, 在画质没有明显下降的情况下大幅减小文件大小。

例如,一张高质量的未压缩图像可能有 46 MB。压缩为 JPEG 后, 同一张图像可以缩小到只有 4.1 MB。但它是如何在保持画面清晰的同时做到这一点的呢?

答案就在于 compression process, 这个压缩过程,它利用人眼的视觉特性,去除不必要的数据。

JPEG 做了什么?

简单来说,JPEG 会分析图像,并移除人眼不易察觉的细节。当你 使用 JPEG 压缩图像时,可以控制应用多少压缩。通过调整“质量”设置, 你可以决定要节省多少空间。随着质量从 100% 降到 0%,文件大小也会 随之减小。

压缩越多,图像分辨率虽然保持不变,但你可能会开始看到一些缺陷或“伪影” 出现。这些缺陷通常表现为小方块,一般不放大查看很难注意到。JPEG 的目标是 在不让人眼觉得画面变差的前提下,尽可能缩小文件大小。

JPEG 压缩的步骤

JPEG 压缩 并不只是单一步骤,而是一系列旨在降低 图像大小的技术。以下是让 JPEG 高效的五个关键步骤。

步骤 1:色彩空间转换

图像由像素组成,每个像素包含红、绿、蓝(RGB)三个分量,共同形成颜色。 JPEG 首先会把这些 RGB 值 转换到另一种色彩空间:

  • 亮度(Luminance): 表示像素的明暗程度,对整体图像的对比度非常重要。
  • 色度(Chrominance): 表示颜色信息,包括色调和饱和度。

这种转换利用了人眼对亮度(亮度信息)比对颜色 (色度信息)更敏感这一点。通过把亮度和颜色分离,JPEG 可以在后续步骤中有针对性地减少数据, 同时保留关键的视觉细节。

在这一步中并不会丢失数据,但它为后续的高效压缩打下基础。

步骤 2:色度抽样缩减/Chroma Subsampling

Chroma Subsampling 是 是一种在色彩空间转换之后应用的技术。还记得我们说过,人眼在感知 颜色(色度)方面不如感知亮度(亮度信息)敏锐吗?

JPEG 就利用了这一点,通过减少颜色数据的数量来压缩。它会将蓝色和红色的色度 图像按每 4 个像素为一组进行平均,从而缩小这些图像。这使得颜色数据大幅减少,同时保持 亮度(明暗信息)不变。到这一步时,图像已经压缩了大约一半。

步骤 3:离散余弦变换(DCT)

离散余弦变换(DCT) 是一种数学技术,用来把图像数据 从空间域(图像以像素网格的形式表示)转换到频率域。这个过程 有助于识别图像中哪些部分包含最重要的视觉信息,哪些部分可以被 被丢弃。

DCT 将图像分成 8x8 的小块,并将每个块转换为一组频率值。更高的 频率代表像素值的快速变化,如边缘或噪点,通常不太容易被 人眼察觉,可以被简化或移除。

步骤 4:量化

应用 DCT 后,得到的频率数据会经过 量化。在这一步中, 通过将频率值除以一组称为量化表的常数来缩小频率值的范围。 该过程实质上是对频率值进行取整以简化它们。

高频值会被更强地量化,这意味着它们会丢失更多精度,因为相对于整体图像质量来说,它们不那么重要, 这一第四步减少了表示图像所需的数据量,使 文件更小。然而,过度量化可能会导致明显的失真,例如块状感或模糊,尤其是在 较高压缩级别时。

步骤 5:游程编码和哈夫曼编码

量化之后,数据仍然不够紧凑,无法实现高效存储。这时 游程编码(RLE)哈夫曼编码 就派上用场了。

首先,RLE 用于简化长串重复数据(如连续的零),通过存储重复次数 而不是每个单独的值。然后应用哈夫曼编码,这是一种用更短的比特码替换高频出现值的技术,从而进一步缩小文件大小。 使用更短的比特编码,从而让文件变得更小。

These two 编码方法 协同工作,在不牺牲 太多图像质量的情况下,大幅减小文件大小!

附加说明

虽然 JPEG 是一种高效的格式,但仍有一些重要事项需要注意:

  • 压缩级别:JPEG 允许你选择压缩级别,但更高的压缩会减小文件大小,同时可能引入明显的失真,如边缘模糊或像素块。这是因为量化表的数值过高,会在数据中产生更多的零,使文件更小,但会降低图像质量。
  • 高频数据丢失:量化会降低高频数据(如锐利边缘等细节)的精度,这也是为什么 JPEG 非常适合平滑纹理,却不太擅长处理锐利线条和矢量图形的原因。
  • 不适合矢量图形:JPEG 并不适合压缩矢量图形,因为它可能在形状或线条的边界处产生明显的失真。

尽管存在这些限制,JPEG 仍是最流行的图像格式,部分原因在于它历史悠久、原理清晰且免版税。不过,像 WebPHEIF 等更新的格式在不影响质量的情况下提供了更高的压缩率,在某些场景中是更有吸引力的替代方案。

总结

JPEG 压缩算法是在图像数据管理方面的一项重要成果。通过将图像拆分为更小的块、应用数学变换以及使用游程编码和哈夫曼编码等高效编码技术,它让我们可以用更小的文件大小存储高质量图像。

虽然 JPEG 存在一些局限,尤其是在高压缩级别或处理矢量图形时,但其广泛的使用,以及在摄影图像方面带来的良好效果,使其成为经久不衰的标准。