<!-- title: 没删一个像素：JPEG靠丢频率骗眼睛 -->
<!-- domain: programming -->
<!-- video: https://www.youtube.com/watch?v=CR3WQ003EnE -->

# 没删一个像素：JPEG靠丢频率骗眼睛

把一张 50MB 的 RAW 照片存成 JPEG，体积能从 50MB 瘦身到 2MB，缩了 96%。可你再把这张 JPEG 打开，每一个像素的位置都还在，亮度也几乎没变。这中间凭空消失的几十兆数据到底去了哪？这是 Branch Education 这支视频最迷人的地方——它没有用一堆术语把你吓退，而是把 JPEG 的整条流水线一层一层拆开，让你亲眼看见：**JPEG 从头到尾没有删除任何一个像素，它删的是你的眼睛根本看不清的"频率"。**

更反常识的是，这套算法里真正"丢数据"的步骤只有一步，剩下五步全是无损的数学变换。换句话说，JPEG 的高明之处不在于"压缩"，而在于它对人眼弱点的精准利用——它知道你对亮度敏感、对颜色迟钝，对平滑渐变敏感、对细密纹理迟钝。压缩不是在抠字节，而是在算计你的视觉系统。这篇文章就把视频里的算法逻辑彻底讲透，并补上它没展开的工程细节。

## 视频背景卡片

| 项目 | 内容 |
|------|------|
| 视频标题 | How does JPEG Work?（JPEG 压缩如何运作） |
| 频道 | Branch Education（百万订阅级工程科普频道） |
| 时长 | 约 20 分钟 |
| 播放量 | 数十万（频道主力爆款之一） |
| 核心主题 | 逐层拆解 JPEG 图像压缩算法的每一步 |

## 核心内容拆解

### 一、第一刀砍的不是像素，是颜色——YCbCr 与色度抽样

很多人以为 JPEG 一上来就在"压"图像，其实第一步是个障眼法：它把图像从 RGB（红绿蓝）转换到 **YCbCr** 色彩空间。Y 是亮度（luminance），Cb 是蓝色色度，Cr 是红色色度。这一步本身无损，纯粹是换个坐标系。

为什么要换？因为人眼的视网膜上负责感知亮度的视杆细胞数量，远远超过负责感知颜色的视锥细胞。换句话说，**你对黑白的分辨率极高，对彩色的分辨率其实很烂**。JPEG 抓住这个弱点，在 Y（亮度）通道保留全部像素，却把 Cb、Cr（色度）两个通道按 **4:2:0** 抽样——每 4 个像素只保留 1 个颜色样本。

这一刀下去，色度数据直接砍掉一半还多，而你看到的照片颜色几乎没变化。视频里反复强调：这是整条流水线里"性价比最高"的压缩，几乎零感知损失。**延伸一点**：这正是为什么手机拍的天空、肤色看起来很自然——你的大脑会自动用亮度信息去"脑补"颜色边界。可以说，JPEG 第一刀骗的不是相机，是你的视神经。

### 二、8×8 分块：为什么 JPEG 的马赛克总是方形的

做完色彩处理，JPEG 把每个通道切成无数个 **8×8 像素的小方块**，每一块独立处理。这个"8"不是随便选的：太小则编码效率低，太大则一个量化矩阵管不过来局部特征。64 这个数还恰好是 DCT 运算最顺手的大小。

这个分块决定了一件事：**JPEG 所有著名的瑕疵都长成 8×8 的方块**。你把一张 JPEG 放大到极致，或者把压缩质量拉到最低，看到的那种一格一格的马赛克、色块，正是这些 8×8 块的边界。视频里用可视化清晰展示了：相邻两个块各自算各自的频率，压得太狠时它们在接缝处"对不上"，于是边界就裂开了。这是理解 JPEG 失真本质的关键——**失真永远是块状的，因为它的工作单位就是块**。

### 三、DCT：把图像翻译成"频率语言"（无损的核心）

这是整条算法的灵魂，也是最反直觉的一步。对每个 8×8 块，JPEG 做一次**离散余弦变换（DCT，Discrete Cosine Transform）**。它把 64 个像素值，换成 64 个"频率系数"。变换后，左上角是 DC 系数（这块的平均亮度），往右下走，系数代表越来越高空间频率的成分——低频是平滑的明暗渐变，高频是头发丝、文字边缘那种剧烈变化。

关键是：**DCT 本身完全无损、完全可逆**。它不丢一个 bit，只是把图像从"空间域"翻译到"频率域"，换了一种表达方式。那为什么还要费劲做这个翻译？因为图像的"能量"会高度集中在低频。视频用一个 8×8 灰度块演示：变换后，左上角几个数字很大，右下角一大片几乎是零。这一步为后面的"丢高频"埋好了伏笔——**先把信号重排成"重要的在前、不重要的在后"，才可能精准地只丢不重要的部分**。这也是 DCT 比傅里叶变换（DFT）更适合图像的原因：它对实数信号能量更集中，边界不产生伪影。

### 四、量化：唯一真正"丢数据"的一步，质量滑块就在这

整条流水线只有这一步是有损的、不可逆的。做法听起来很粗暴：把 64 个 DCT 系数，分别除以一张**量化矩阵（quantization matrix）**里对应的数字，然后四舍五入取整。量化矩阵的设计是——左上角（低频）除以小数，右下角（高频）除以大数。

结果就是：那些本来就很小的高频系数，被大数一除、再取整，**直接变成了 0**。它们携带的细节信息被永久抹掉，再也找不回来。而低频系数因为除以小数，基本保留。

Photoshop 里那个"质量 1–100"的滑块，本质上就是在**整体缩放这张量化矩阵**：质量越低，矩阵里的数越大，被清零的频率越多，文件越小、画面越糊。视频把同一张图用不同质量存出来对比，糊成马赛克和清晰如初的区别，全在这张表的数字大小上。**这一步是 JPEG 的心脏**——前面所有铺垫都是为了让你能在这里精准下刀。注意，量化矩阵不是算法自己学出来的，标准 Annex K 里直接给了一张"推荐表"，几乎所有相机都在用它。

### 五、之字形扫描 + 游程编码：把一长串零排成队

量化之后，每个 8×8 块的右下角通常是一大片 0。JPEG 用**之字形扫描（zigzag scan）**，按对角线顺序重新读这 64 个数，让低频在前、高频在后，于是那些 0 就连续地堆在末尾。

接着用**游程编码（RLE）**把"连续的 0"压缩成"0 重复 N 次"。比如 20 个连续的 0，就记成一个符号。这一步无损，但因为高频全变成了 0，游程编码的收益惊人——这也是为什么"丢高频"能换来这么大的体积下降：**真正占地方的高频信息，在量化那一步已经被归零，这里只是把零打包带走**。DC 系数则单独做差分编码，只记本块和上一块的亮度差，进一步省字节。

### 六、哈夫曼编码：无损的最后一刀，频次越高码越短

打包完的符号流，最后再过一遍**熵编码（Huffman 或算术编码）**。原理是变长编码：出现频率高的符号用很短的二进制码，罕见的符号用长码。这一步同样完全无损。经过前几步，数据里已经充满了重复模式（大量零、大量相似差分），哈夫曼码能把它们压到理论极限附近。

到这里，原始像素已经被翻译成一段极其紧凑的二进制流。**JPEG 的全程可以概括为：一次有损（量化）+ 五次无损（色彩变换、DCT、之字形、RLE、Huffman）**。真正"破坏信息"的只有量化那一下，其余都是为了让那一下的战果最大化。

### 七、为什么文字和截图用 JPEG 是一场灾难

视频没重点讲，但这是工程上最容易踩的坑。JPEG 是为**照片**设计的——照片里大量平滑的渐变（天空、肤色、虚化背景），低频为主，量化几乎无损。但**文字、截图、漫画、logo** 这些内容恰好相反，充满了锐利的边缘和高对比度细节，全是高频信息。

把截图存成 JPEG，量化会把这些高频一刀清零，于是文字边缘出现一圈圈水波纹状的**振铃噪声（ringing / mosquito noise）**，红字周围还会渗出彩色光晕。这就是为什么 UI 设计、代码截图永远该用 **PNG**（无损、专为高频锐边优化），而不是 JPEG。**记住这条工程铁律：JPEG 给照片，PNG 给图形**。新一代的 **WebP / AVIF** 在两者间做了更好平衡，但 JPEG 凭借无专利、全平台支持的先发优势，至今仍是互联网图像的默认格式。

## 知识结构图

```mermaid
flowchart TD
    A[原始 RGB 图像] --> B[色彩空间转换<br/>RGB → YCbCr]
    B --> C[色度抽样 4:2:0<br/>丢颜色分辨率 · 近乎无损]
    C --> D[切成 8×8 像素块]
    D --> E[DCT 离散余弦变换<br/>空间域 → 频率域 · 无损]
    E --> F[量化 Quantization<br/>高频系数除大数清零<br/>★唯一真正有损的一步★]
    F --> G[之字形扫描<br/>低频在前 高频零在后]
    G --> H[游程编码 RLE + DC差分]
    H --> I[哈夫曼/算术熵编码<br/>无损 · 压到极限]
    I --> J[紧凑的 JPEG 文件]
    F -.丢的是眼睛看不见的高频.-> K((人眼弱点:<br/>亮度敏感/颜色迟钝<br/>渐变敏感/纹理迟钝))
```

## 实战启示

**对开发者的启示**：理解 JPEG 的本质是"砍高频"，你就能在工程选型上少踩无数坑。做图片压缩服务时，**永远不要用 JPEG 处理含大量文字或锐边的素材**，质量 100 也救不了振铃噪声，应转 PNG/WebP；给照片做缩略图，质量设到 75–85 是甜点区，再高收益递减、再低块状伪影暴涨。**反复打开-另存的代际损失（generation loss）**是另一个隐形杀手：每次 JPEG 编码都会再量化一次，高频越丢越多，画质持续下滑——所以编辑链路里始终保留一份无损源（PSD/PNG/TIFF），只在最后导出时转一次 JPEG。

**对普通用户的认知升级**：你终于知道"图片质量"滑块调的到底是什么——不是"清晰度"，而是"还剩多少高频细节"。下次看到压缩过度的马赛克照片，你能一眼指出那是 8×8 量化块在接缝处断裂。更重要的是，JPEG 揭示了一个深刻的工程哲学：**最高效的压缩，不来自更聪明的打包算法，而来自对"接收端"（人眼）弱点的精准建模**。视频压缩（H.264/HEVC）、音频压缩（MP3 的心理声学模型）都是同一套思路——丢掉感知不到的东西，远比费力压缩感知得到的东西高效一万倍。这也是为什么 MP3 能把 CD 压到十分之一却听不出差别：它丢的是你听觉的盲区，正如 JPEG 丢的是你视觉的盲区。

## 延伸学习路径

1. **Branch Education 频道其他视频** — 同系列的《How does SSD Work?》《How do Touchscreens Work?》，同样的可视化深度，强烈推荐订阅。
2. **Unraveling the JPEG（Mozilla 的交互式教程）** — online9787.github.io，可以在网页里实时拖动量化矩阵、看每个 8×8 块的 DCT 系数，把本文抽象的步骤变成可玩的实验。
3. **《JPEG 原理与实现》— Computerphile 系列** — University of Nottingham 出品，用白板讲清 DCT 与量化的数学直觉，适合补理论。
4. **JPEG 官方标准 ISO/IEC 10918-1 / Annex K** — 想看那张著名的量化矩阵原文，直接读标准附录，工程师硬核路线。
5. **AVIF 与 JPEG XL 对比** — 了解下一代图像格式如何用更大的块（AVIF 的 AV1 编码）和更聪明的熵编码超越 JPEG，以及为什么 JPEG 至今没被替代。

## 一句话总结

JPEG 不是在"删像素"，它是在用量化一刀削掉你看不见的高频频率——这是把压缩算法做到极致的真正秘密：**与其压缩全部信息，不如精准丢掉人眼感知不到的那部分**。

## 参考来源

1. [How does JPEG Work? — Branch Education（YouTube）](https://www.youtube.com/watch?v=CR3WQ003EnE) — 本文深度解读的核心视频
2. [How does JPEG Work? — Branch Education 配套图文](https://branch.education/how-does-jpeg-work/) — 频道官方详细图文版，含逐步可视化
4. [How JPEG Compression Works — FoundThisWeek](https://www.foundthisweek.com/items/how-jpeg-compression-works) — 对 Branch Education 视频步骤的逐层概述
5. [JPEG 标准 ISO/IEC 10918-1 Annex K](https://www.w3.org/Graphics/JPEG/) — 量化推荐矩阵与 baseline 流程的原始出处

---
> 本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵**爱卫生**（微信ID: gprshome201101）维护，聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。
> 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
