webp图片格式的压缩算法

WebP 的压缩算法主要基于 VP8 视频编码技术,并结合了 有损压缩(Lossy Compression)无损压缩(Lossless Compression) 两种方式来优化图像质量和文件大小。下面详细介绍 WebP 的压缩算法原理。


1. WebP 有损压缩(Lossy Compression)

WebP 的有损压缩基于 VP8 视频编解码技术,主要采用 基于帧内预测(Intra-frame Prediction)+ 离散余弦变换(DCT)+ 熵编码 来降低文件大小,同时尽可能保留图像质量。

1.1 帧内预测(Intra-frame Prediction)

  • WebP 通过预测每个像素块的颜色值来减少存储数据量。
  • 每个 16×16 或 4×4 的像素块可以使用周围的像素值进行预测,WebP 提供 4 种预测模式:
    • Horizontal(水平预测)
    • Vertical(垂直预测)
    • True Motion(基于局部图像梯度预测)
    • DC Mode(均值预测)
  • 预测后仅存储实际像素值与预测值的残差(Residuals),从而减少数据量。

1.2 离散余弦变换(DCT)

  • WebP 采用 4×4 或 16×16 的 DCT 进行频域转换,类似于 JPEG 中的 8×8 DCT,但 WebP 允许更灵活的块大小选择。
  • 通过 DCT,将图像数据分解为高频和低频分量:
    • 低频分量(重要细节)保留较多数据。
    • 高频分量(细节较少部分)可以忽略或进行量化。
  • 这可以去除人眼不容易察觉的细节,从而进一步压缩数据。

1.3 量化(Quantization)

  • WebP 使用 自适应量化,可根据人眼视觉特性丢弃不重要的信息(例如高频噪声)。
  • 量化步骤是可调节的,压缩比越高,损失的细节越多,但文件体积更小。

1.4 熵编码(Entropy Coding)

  • WebP 采用 基于帧内预测误差的熵编码,利用类似 Huffman 编码或基于上下文自适应的算术编码来进一步压缩数据。
  • 这一步骤减少了数据的冗余,使编码更高效。

有损 WebP vs JPEG

对比项 WebP 有损 JPEG
变换方式 4×4 / 16×16 DCT 8×8 DCT
预测方式 帧内预测(基于 VP8) 无预测
量化方式 自适应量化 标准量化表
编码方式 帧内熵编码(基于 VP8) Huffman 编码
压缩比 约比 JPEG 小 25%-34% 标准 JPEG

WebP 有损格式比 JPEG 体积更小,同时画质更优。


2. WebP 无损压缩(Lossless Compression)

WebP 的无损压缩采用多种高级算法,包括 熵编码、颜色索引优化和基于 LZ77 的前缀编码,目标是提供类似 PNG 的质量,但文件体积更小。

2.1 预测编码(Predictive Coding)

  • 无损 WebP 也使用像素块预测,但采用不同于有损 WebP 的方法:
    • 预测像素的颜色值,并仅存储偏差值(残差)。
    • 预测模式可以基于 水平、垂直、渐变补偿 等方式。
    • 这样可以减少存储的数据量,提高压缩率。

2.2 颜色索引优化

  • WebP 会自动创建 自适应色彩查找表(Color Lookup Table, CLUT),在可能的情况下用较少颜色索引表示图像数据。
  • 这种方法类似 GIF 的调色板优化,但 WebP 的索引方式更智能,减少了存储大小。

2.3 LZ77 前缀编码

  • 采用基于 LZ77 算法的 前缀编码(Prefix Coding),类似于 PNG 采用的 DEFLATE 算法。
  • 这种方法能够高效地检测重复像素模式,并减少存储的数据量。
  • 在 WebP 里,编码器会基于图像内容选择最佳的编码策略,确保最优压缩比。

2.4 Huffman 编码

  • WebP 结合 Huffman 编码 进行无损压缩,提高压缩效率,减少最终文件大小。

无损 WebP vs PNG

对比项 WebP 无损 PNG
颜色索引优化
预测编码
LZ77 前缀编码 有(DEFLATE)
Huffman 编码
文件大小 比 PNG 小 26% 标准大小

WebP 无损格式比 PNG 文件体积小 26%,但画质相同或更优。


3. WebP 动图(Animated WebP)

WebP 还支持 GIF 替代方案,称为 Animated WebP,它比 GIF 具有更好的压缩效果,并支持:

  • 有损和无损动画
  • Alpha 通道(透明背景)
  • 24-bit 颜色深度(GIF 仅支持 8-bit)
  • 比 GIF 体积小 30%-50%
  • 支持帧间差分(Frame Difference Encoding),仅存储变化部分,减少重复数据,提高压缩效率。

4. WebP 压缩示例

以一张 100KB 的 JPEG 图片为例:

格式 文件大小 视觉质量
JPEG 100 KB 标准
WebP 有损 70 KB 相似或更优
PNG 200 KB 无损
WebP 无损 150 KB 无损(但更小)

总结

WebP 通过结合 VP8 帧内预测、DCT 变换、LZ77 前缀编码、熵编码、量化优化 等多种技术,实现更高效的图像压缩:

  1. 有损 WebP 比 JPEG 体积小 25%-34%,但画质更优。
  2. 无损 WebP 比 PNG 小 26%,但保持相同质量。
  3. 动图 WebP 比 GIF 小 30%-50%,且支持 24-bit 颜色和透明通道。

这些优势使 WebP 成为现代 Web 开发中图片优化的首选格式,特别适用于网页性能优化、移动端开发、PWA、CDN 传输优化等场景。 🚀

posted @   cheeliu  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示