JPG 格式是如何工作的 *通过人类感知理解图像压缩*

发布: (2026年1月6日 GMT+8 21:03)
6 min read
原文: Dev.to

Source: Dev.to

看起来您只提供了来源链接,而没有提供需要翻译的正文内容。请把您想要翻译的文本粘贴在这里,我会帮您翻译成简体中文,并保留原有的格式、Markdown 语法以及代码块和 URL。

Source:

为什么 JPG 表现如此出色

Joint Photographic Experts Group (JPG) 格式于 1992 年推出,其核心理念非常简单:

人眼对亮度的变化比对颜色的变化更敏感。

现代相机传感器捕获的信息远超人眼能够感知的范围。JPG 压缩正是利用了这一区别,在显著减小文件体积的同时,保持感知上的图像质量。

JPG 压缩的核心步骤

  1. 颜色空间转换

    • 图像通常以 RGB(红、绿、蓝)存储。
    • JPG 将 RGB 转换为 YCbCr,将亮度与颜色分离:
      • Y → 亮度(Luminance)
      • Cb → 蓝色差分(Blue chroma)
      • Cr → 红色差分(Red chroma)

    这种分离使得算法能够对颜色数据进行更激进的压缩,而保留人眼最敏感的亮度信息。

  2. 块划分

    • 将图像划分为若干小块,通常为 8 × 8 像素
    • 每块可以独立压缩,并可根据局部细节程度采用不同的压缩强度。
    • 过度压缩会产生可见的块状伪影。
  3. 离散余弦变换 (DCT)

    • 对每块进行基于余弦的变换,将像素值转换为 频率分量
    • 低频 → 平滑区域(非常重要)
    • 高频 → 细节纹理(不太显眼)

    这一步为后续的高效降采样做好准备。

  4. 量化(有损阶段)

    • 降低精度,尤其是高频颜色数据。
    • 丢弃人眼不易察觉的信息。
    • 之字形(zig‑zag) 顺序遍历系数,以优先保留重要数值。
    • 这是 JPG 压缩唯一真正的有损阶段,也正因如此,反复保存 JPG 会导致质量逐渐下降。
  5. 熵编码与重建

    • 将压缩后的数据进行熵编码,打包成 .jpg 文件。
    • 解码时,数据被转换回 RGB。
    • 最终得到的图像对我们而言“看起来相同”,但实际数据量大幅减少。

块大小与量化的影响

影响较小的块较大的块
细节细节保留更好,文件更大压缩率更高,可能出现可见伪影
典型结果更好地保留细腻纹理在高压缩率下出现明显块状感

实际使用中,JPG 可以舍弃 约 75 % 的颜色细节,而几乎不影响亮度信息——这对照片而言是极佳的折中方案。

JPG 与 PNG – 快速比较

特性JPGPNG
压缩有损无损
透明度❌ 否✅ 是
最佳用途照片用户界面、标志、文字
典型文件大小较小较大

PNG 变体

变体颜色深度透明度典型用途
PNG‑8受限调色板(256 种颜色)单色透明简易图形、图标
PNG‑32数百万种颜色真透明(全范围)用户界面元素、高质量图形

颜色模型:基于光 vs. 基于墨水

模型组件解释
RGB(基于光)红色, 绿色, 蓝色黑色 = 无光, 白色 = 完全强度
CMYK(基于墨水)青色, 洋红, 黄色, 黑色用于印刷;需要从 RGB 进行颜色转换

因为 JPG/PNG 是面向屏幕的格式,它们 不是印刷原生。要进行专业输出,需要转换为印刷就绪的颜色空间(例如 CMYK)。

选择合适的格式

用例推荐格式
📸 摄影JPG
🎨 UI / 标志 / 透明度PNG
🌐 对带宽敏感的应用JPG
🖨️ 专业打印转换为打印原生格式(例如 TIFF、PDF 或 CMYK 编码的 PNG)

了解 JPG 的工作原理可以让你真正掌控质量、性能和存储——不仅仅是导出对话框中的一个滑块。

Discussion

你在项目中注意到 JPG 与 PNG 的质量差异吗?你更倾向使用哪种格式——为什么?

Read the original article on freeCodeCamp

Back to Blog

相关文章

阅读更多 »