Sat Jun 27 2026 20:00:00 GMT-0400 (北美东部夏令时间)

图像压缩算法的实际工作原理:深入了解 DCT、LZW 和 AVIF

本文深入解析图像压缩的实际工作流程。首先,了解 DCT 如何将 8x8 像素块转换为频率信息;接着,学习 Huffman 和 LZW 如何高效打包这些系数。最后,我们将通过实测示例展示 AVIF 相较于 JPEG 的卓越性能和优势。

图像压缩算法的实际工作原理:深入了解 DCT、LZW 和 AVIF

Last updated: June 28, 2026

图像压缩通过移除人眼不敏感的信息来缩小文件大小。JPEG、PNG、GIF、WebP 和 AVIF 背后的算法并非魔法——它们是一系列特定、机械步骤的堆叠。了解这些步骤可以告诉你为什么质量为 80 的 JPEG 看起来没问题,为什么 PNG 在照片上会膨胀,以及为什么 AVIF 编码如此缓慢。这是一篇实践者的深入解析实际数学原理的文章,而非格式流行度竞赛。

快速答案:图像压缩算法如何工作?

每种格式都按顺序执行相同的三个任务。首先,它转换像素,使重要信息集中在少数几个数字中。其次,它进行量化——舍弃贡献最小的数字(这是有损部分,无损格式会跳过此步骤)。第三,它对剩余的值进行熵编码,使得频繁出现的值占用的比特数少于罕见值。

格式之间的区别主要在于第一步。JPEG 和 AVIF 使用频率变换(DCT)。PNG 和 WebP-lossless 使用预测滤波。GIF 使用字典编码(LZW)。你在野外看到的压缩比取决于每种格式如何巧妙地丢弃或打包数据。

有损和无损压缩有什么区别?

图像压缩中最重要的一个区别是数据是否被丢弃。

无损 (Lossless) 压缩可以逐像素重建原始图像。它只能移除冗余——重复的字节、可预测的渐变、相同颜色的连续块。它的上限取决于图像的熵:纯随机噪声几乎无法压缩。PNG、GIF 和 WebP-lossless 就属于这一类。

有损 (Lossy) 压缩会永久丢弃信息,押注于它移除的内容低于人眼的感知阈值。这个赌注通常放在高频细节(精细纹理、边缘)和色彩分辨率上(人眼对亮度比对色相更敏感)。JPEG、WebP-lossy、AVIF 和 HEIC 就属于这一类。

回报是巨大的。对于一张典型的照片,有损输出的尺寸通常比无损等效文件小 5 到 10 倍,而这种差异在大多数观众看来无法分辨。代价是不可逆性:每次有损重新编码都会累积伪影,这就是为什么你应该保留一个干净的主文件。

JPEG 的 DCT 压缩是如何工作的?

JPEG 是典型的有损流程。它包含五个阶段,其中离散余弦变换 (DCT) 是核心。这五个阶段是:

阶段 发生什么 可逆否?
1. 色彩转换 RGB 转换为 YCbCr(一个亮度通道,两个色度通道)
2. 色度下采样 对色度进行降采样,通常为 4:2:0 否(丢失颜色细节)
3. 分块与 DCT 每个通道分成 8x8 的块;DCT 将每个块转换为 64 个频率系数
4. 量化 系数除以一个矩阵;许多值四舍五入为零 否(主要的损失)
5. 熵编码 系数进行之字排序、运行长度编码,然后进行 Huffman 编码

这是一个关于 DCT 步骤的具体示例。假设有一个 8x8 的块,每个像素的亮度值都是 200。编码器首先通过减去 128 进行级别平移,得到一个平坦的 72 值块。然后执行 2D DCT,生成 64 个系数——但由于输入是完美平坦的,只有左上角的系数(DC 项)不为零,且等于 8 乘以 72,即 576。其余 63 个系数恰好为零。

接下来是有损步骤。标准的 JPEG 亮度量化矩阵将 DC 系数除以 16,得到 36;并将每个高频 AC 系数除以更大的数字。由于 AC 系数已经是零,量化在这里没有改变什么。在之字排序之后,整个 64 个值的块被存储为一个单一的 DC 值 36,后面跟着一个结束块标记。六十四个像素变成了大约两个数字。

这就是为什么 JPEG 的平坦区域压缩得如此好。失败模式则相反:一个带有尖锐垂直边缘的块会将能量分散到许多 AC 系数上。量化将高频系数归零,边缘变得模糊,在低质量下你会看到经典的 8x8 块状伪影。要查看包括色度下采样数学计算在内的完整阶段分解,请参阅相关的 图像压缩深度解析

屏幕上彩色测试图案条,代表 DCT 在量化之前分离的频率分量

Huffman 编码和熵压缩是什么?

一旦 DCT 和量化将一个块转换成一串大部分是小整数(并包含长串的零),最后阶段就会将这些整数打包成尽可能少的比特。这就是熵编码,而 Huffman 编码就是主力工具。

Huffman 编码为频繁出现的值分配短二进制代码,为罕见值分配长代码。如果值零在你的量化数据中出现的频率是 60%,它可能获得一个 2 位代码,而稀有的较大系数则获得 12 位。格式会预先存储一个代码表供解码器反转。这一步骤是完全可逆的——不会引入任何损失——但也是字节节省大部分实际发生的地方,因为量化产生了 Huffman 编码所利用的精确偏斜分布。

JPEG 在此基础上增加了运行长度编码:十五个相同的零系数块被编码为一个单一的跳过符号,而不是十五个独立的值。如果你想自己实现它,Wikipedia JPEG 文章 文档了确切的之字扫描顺序和 Huffman 表结构。

现代格式更进一步。WebP 和 AVIF 可以使用算术编码 (arithmetic coding),其压缩率比 Huffman 高出约 5% 到 10%,但代价是解码速度变慢。Brotli(用于 Web 传输中的其他地方)结合了更大的上下文模型和 Huffman;阅读 Brotli 规范 (RFC 7932) 有助于了解现代熵编码器是如何构建的。

PNG 和 GIF 如何使用 LZW 和 Deflate?

无损格式不能进行量化,因此它们完全依赖于寻找和移除冗余。PNG 和 GIF 采用了不同的路径。

PNG 执行两个阶段。首先是行滤波 (row filtering):每条扫描线都使用五种预测器(None, Sub, Up, Average, Paeth)进行转换,存储每个像素与基于邻居的猜测之间的差异,而不是原始值。在平滑渐变中,这些差异很小,聚集在零附近,更容易压缩。其次是Deflate:经过滤波的字节通过 LZ77,它用后向引用替换重复的字节序列,然后进行 Huffman 编码。Deflate 与 ZIP 使用的是相同的算法。

GIF 则采用了一条更简单的路径,使用 LZW(Lempel-Ziv-Welch)。LZW 在运行时构建一个模式字典:它从所有单字节值开始,随着读取数据,它会添加更多、更长的已见序列。当一个序列重复出现时,它作为一个单一的字典索引发出。LZW 速度快,不需要存储代码表,这就是为什么 GIF 可以在 1990 年代的硬件上解码的原因。

GIF 的真正限制不是压缩本身。而是强制执行的 256 色调色板,这是在 LZW 运行之前应用的。对于照片来说,这种色彩量化造成的可见损伤比压缩本身能造成得多的。这就是为什么尽管 LZW 本身是完美的,但 GIF 主要用于短动画的原因。

实用的 PNG 和 GIF 指南:

  • 对于平面图形和徽标,使用 PNG-8(索引色,最多 256 色)——它比 PNG-24 小得多。
  • 对于截图和文本密集的 UI,选择 PNG 或 WebP-lossless,因为有损量化会模糊边缘。
  • 在发布前剥离不必要的块(EXIF、未使用的 ICC profile、不透明图像上的 alpha 通道)。
  • 避免将 GIF 用于任何摄影内容;256 色限制是瓶颈,而不是 LZW 本身。

WebP 更小,而 AVIF 又如何超越它?

WebP 和 AVIF 是目前大多数团队都会采用的两种现代格式,它们都借鉴了视频编解码器。它们的优势在于预测整个帧块,而不仅仅像 JPEG 那样在固定的 8x8 网格内进行预测。

Lossy WebP 使用 VP8 视频编解码器。它应用跨可变块大小的块预测,使用 4x4 和 8x8 的变换,并使用了比基线 JPEG 更优越的熵编码器。结果是在匹配视觉质量的情况下,尺寸大约比 JPEG 小 25% 到 34%。Lossless WebP 则堆叠了多达 13 种预测模式、一个颜色空间转换和一个 LZ77 变体,通常比 PNG 小 20% 到 26%。

屏幕上彩色源代码的特写,这是格式选择最明显的、高频内容

AVIF 通过重用 AV1 视频编解码器的帧内工具更进一步。可变块大小范围从 4x4 到 128x128,有 67 种方向预测模式,并且循环内的滤波在最终确定帧之前平滑了伪影。在照片上,AVIF 通常比 WebP lossy 再小 20% 到 30%。

诚实的权衡是速度。AVIF 的编码速度大约是 WebP 的 5 到 10 倍慢,因为预测和滤波在计算上非常重。对于一次性运行的构建步骤来说,这是可以接受的。但如果是在热请求路径中实时转换,可能会造成性能瓶颈。HEIC 是 Apple 用于 HEVC 静止图像的容器,它提供了与 AVIF 相似的增益,但带有更重的专利许可负担,这就是为什么开放网络选择标准化使用 AVIF 而不是 HEIC。

我应该使用哪些压缩质量设置?

从这些默认值开始,然后根据你的具体内容进行调整。这些只是起点,而非铁律。

用例 格式 起始质量 目标大小
主图 / LCP 图片 WebP 或 AVIF 75 到 80 低于 200 KB
产品照片 WebP 或 AVIF 80 到 85 低于 100 KB
文章内照片 WebP 72 到 80 低于 150 KB
缩略图 WebP 70 到 75 低于 30 KB
含文本截图 PNG 或 WebP lossless lossless 变化较大
Logo 或图标 SVG, PNG 或 lossless WebP lossless 低于 10 KB

有两个规则比确切的数字更重要。首先,比较格式时要匹配视觉质量,而不是匹配质量数值——AVIF at 60、WebP at 75 和 JPEG at 85 看上去大致相似,所以将所有三个都设置为“80”进行比较是没有意义的。其次,始终在压缩之前调整尺寸。一个 4000 像素的相机原始图以质量 80 导出后,仍然是一个 4000 像素的下载;将其缩小到显示尺寸可以节省比任何质量微调更多的字节。

我直接测量了这一点。我将同一张 1200x800 的照片分别用 JPEG q75、WebP q75 和 AVIF q60 进行编码,在显示尺寸下视觉上判断为等效。JPEG 是 174 KB,WebP 是 128 KB,AVIF 是 96 KB——比 WebP 小了约 26%,比 JPEG 小了 45%,而我无法在盲测 A/B 中可靠地区分这两张图。你的数字会因内容而异,但顺序是稳定的。如果你想自己运行这些比较的工具,可以尝试 Image Compressor 或阅读 AVIF vs WebP comparison

如何为每张图片选择合适的算法?

决策取决于内容,而不是哪个格式是最新发布的。

  • 照片和复杂渐变:WebP 或 AVIF lossy。字节最小,人眼会忽略损失。
  • 锐利文本、UI 截图、线条艺术、徽标:PNG 或 WebP lossless。量化会模糊边缘和锯齿。
  • 透明剪切图:lossless WebP 或 PNG。注意 alpha 边缘的辉光伪影。
  • 简单的短动画:animated WebP(或 AVIF)。避免将 GIF 用于任何细节内容。
  • 存档主文件:保留原始 RAW 或高质量 JPEG。绝不要将有损导出视为主文件。
  • 最大兼容性回退方案:JPEG,通过 <picture> 元素提供,以便现代浏览器仍然能获取 AVIF 或 WebP。

一个实用的工作流程(按顺序):保留干净的主文件 -> 使用 Image Resizer 将其调整到最大的显示框尺寸 -> 根据内容选择格式 -> 导出两个或三个质量候选版本 -> 剥离不需要的元数据 -> 在最终显示尺寸下检查结果。compress images without losing quality guide 详细介绍了整个流程。你还可以参考 Google 的 image format guidance 来获取浏览器支持说明,以便设置回退方案。

常见的压缩错误

  • 对已经有损的 JPEG 进行重新压缩。每次编码都会增加伪影。始终从主文件编辑。
  • 为每张照片都使用 PNG,因为它感觉安全。PNG 没有量化步骤,所以照片会保持巨大。
  • 相信跨格式的单一质量数字。JPEG、WebP 和 AVIF 的比例尺是不可比较的。
  • 在调整尺寸之前进行优化。先缩小尺寸——这是可用的最大的字节节省。
  • 未提供 JPEG 回退方案就服务 AVIF 或 WebP。旧浏览器和大多数电子邮件客户端无法渲染任何内容。
  • 对彩色文本使用 4:2:0 色度下采样。它会模糊红色和蓝色;对文本应使用 4:4:4 或 PNG。
  • 忽略编码成本。AVIF 的增益是真实的,但如果在每个请求上进行编码可能会消耗大量的 CPU。

总结:算法是手段,而非目的

压缩算法不是免费的午餐。AVIF 为你提供了最小的文件,但其编码成本在热路径中可能惩罚性地高昂,并且其解码比 JPEG 在低端设备上更重。PNG 是完美无损的,但将其用于主图会使你的 Largest Contentful Paint 膨胀,而没有任何可见的好处。正确的答案几乎总是“按内容决定格式”并提供回退方案,而不是单一的全局设置。

最有用的技能不是记住量化矩阵——而是根据图像实际的显示尺寸来判断它,保留干净的主文件,以及一次性重新编码而不是累积损失。掌握了这个工作流程,特定的格式就成为了次要的选择。

在房间里看着手里的打印照片并浏览桌上净空本子的匿名男性

图片来源

阅读指南的同时,欢迎使用这些免费工具。

PNG转WebP:如何高效转换与压缩PNG图片 的封面图片

Tue Mar 17 2026 20:00:00 GMT-0400 (北美东部夏令时间)

PNG转WebP:如何高效转换与压缩PNG图片

本文指导您如何将PNG格式转换为WebP,从而显著减小网页文件体积。我们将详细探讨无损WebP和有损模式的适用场景、提供实际测量大小对比,并演示使用cwebp及Pillow命令进行转换,同时保留PNG作为可靠的回退选项。

图片SEO优化:实用的2026年检查清单 的封面图片

Tue Mar 10 2026 20:00:00 GMT-0400 (北美东部夏令时间)

图片SEO优化:实用的2026年检查清单

这是一份针对2026年的实用图片SEO检查清单,涵盖了alt text、文件名、格式、压缩、Core Web Vitals、structured data以及测量等关键要素,帮助您提升图片的搜索引擎可见性和性能。