Skip to content

WebP 中的无损和透明度编码

摘要

我们将 WebP 编码器和解码器在 PNG 和无损模式下的资源用量进行比较。我们使用 12000 张从网络中随机选择的半透明 PNG 图像集合,并采用更简单的测量方式来显示性能变化。我们重新压缩了语料库中的 PNG,以将 WebP 图片与大小优化的 PNG 进行比较。我们的结果表明,对于文件大小和处理速度,WebP 可以很好地替代 Web 上用的 PNG。

简介

WebP 支持无损且半透明的图片,这使得它成为 PNG 格式的替代方案。PNG 压缩中使用的许多基本技术(如字典编码、霍夫曼编码和颜色索引转换)在 WebP 中也受支持,在最糟糕的情况下,这会导致类似的速度和压缩密度。同时,许多新功能(例如不同颜色通道的单独熵代码、反向参考距离的 2D 局部性以及最近使用的颜色的颜色缓存)可以提高大多数图片的压缩密度。

在这项工作中,我们比较了 WebP 与使用 pngcrush 和 ZopfliPNG 经过高度压缩的 PNG 的性能。我们使用最佳实践重新压缩了网络图片参考资料库,并将无损和有损 WebP 压缩与此资料库进行比较。除了参考资料库之外,我们还针对速度和内存使用基准化分析,选择了两张较大的图片(一张是照片,另一张是图片)。

事实证明,解码速度比 PNG 更快,并且压缩效果比目前的 PNG 格式要压缩 23%。我们得出结论,WebP 可以更有效替代当前的 PNG 图片格式。此外,支持无损 Alpha 值的有损图片压缩在提升网站速度方面提供了更多可能。

方法

命令行工具

我们使用以下命令行工具来衡量性能:

  1. cwebp 和 dwebp。这些工具是 libwebp 库的一部分(从头编译)。
  2. 转化。这是 ImageMagick 软件的命令行工具 (6.7.7-10 2017-07-21)。
  3. pngcrush 1.8.12(2017 年 7 月 30 日)
  4. ZopfliPNG(2017 年 7 月 17 日)

我们使用命令行工具及其各自的控制标志。例如,如果我们引用 cwebp -q 1 -m 0,则意味着已使用 -q 1 和 -m 0 标记调用 cwebp 工具。

图片分类

已选择三个语料库:

  1. 单张照片(图 1),
  2. 一张半透明的图形图片(图 2),以及
  3. 网络语料库:从互联网随机挑选的 12000 张随机生成的 PNG 图片(半透明或半透明)。这些 PNG 图片通过转化、pngcrush、ZopfliPNG 进行优化,且在研究中会考虑每张图片的最小版本。

img

图 1. 摄影图片,1024 x 752 像素。火焰呼吸 “Jaipur Maharaja Brass Band”作者:Chassepierre 比利时公司,作者:Luc Viatour,图片已获知识共享许可 - 署名 - 相同方式共享 3.0 未移植许可。作者网站请点击此处

img

图 2. 图形图片,1024 x 752 像素。来自 Google 图表工具的拼贴图片

为了衡量现有格式 PNG 的全部功能,我们使用几种方法重新压缩了所有原始 PNG 图片:

  1. 每个组件固定到 8 位:转换 input.png -depth 8 位输出.png
  2. 不带预测器的 ImageMagick(1):conversion input.png -quality 90 output-candidate.png
  3. 使用自适应预测器的 ImageMagick:conversion input.png -quality 95 output-candidate.png
  4. Pngcrush(2):pngcrush -brute -rem tEXt -rem tIME -rem iTXt -rem zTXt -rem gAMA -rem cHRM -rem iCCP -rem sRGB -rem alla -rem text input.png input-png
  5. ZopfliPNG(3): zopflipng --lossy_transparency input.pngoutput-candidate.png
  6. 包含所有过滤条件的 ZopfliPNG:zopflipng --迭代 s=500 --filters=01234mepb --lossy_8bit --lossy_transparency input.pngoutput-candidate.png

成效

我们计算了网络库中每张图片的压缩密度(相对于优化了三种效果的 PNG 图片大小):

  1. WebP 无损(默认设置)
  2. 尺寸最小的无损 WebP (-m 6 -q 100)
  3. 最佳的 WebP 无损和 WebP 有损与 alpha(默认设置)。

我们对这些压缩系数进行排序,并将其绘制在图 3 中。

img

图 3. PNG 压缩密度用作参考,1.0。无损和有损方法均压缩了相同的图像。对于每张图片,系统会计算与压缩 PNG 的大小之比,并对大小比进行排序和显示无损压缩和有损压缩。对于有损压缩曲线,在生成较小的 WebP 图片的情况下,选择无损压缩。

对于 libpng,最高质量 (convert) 以及 ZopfliPNG(表 1)的 WebP 已超出 PNG 压缩密度,而编码(表 2)和解码(表 3)的速度与 PNG 大致相当。

表 1. 使用不同压缩方法时的三个语料库的平均每像素位数。

图片集转化质量 95ZopfliPNGWebP 无损 -q 0 -m 1WebP 无损(默认设置)WebP 无损 -m 6 -q 100WebP 有损与 alpha
相册12.312.210.510.19.830.81
血腥 : 露骨1.361.050.880.710.700.51
web6.85 欧元5.054.42 美元4.043.96 欧元1.92 欧元

表 2. 压缩语料库和不同压缩方法的平均编码时间。

图片集转化质量 95ZopfliPNGWebP 无损 -q 0 -m 1WebP 无损(默认设置)WebP 无损 -m 6 -q 100WebP 有损与 alpha
相册0.500 秒8.7 秒0.293 秒0.780 秒8.440 秒0.111 秒
血腥 : 露骨0.179 秒14.0 秒0.065 秒0.140 秒3.510 秒0.184 秒
web0.040 秒1.55 秒0.017 秒0.072 秒2.454 秒0.020 秒

表 3. 使用不同方法和设置压缩的图片文件的三个语料库的平均解码时间。

图片集转化质量 95ZopfliPNGWebP 无损 -q 0 -m 1WebP 无损(默认设置)WebP 无损 -m 6 -q 100WebP 有损与 alpha
相册0.027 秒0.026 秒0.027 秒0.026 秒0.0270.012 秒
平面设计0.049 秒0.015 秒0.005 秒0.005 秒0.0030.010 秒
web0.007 秒0.005 秒0.003 秒0.003 秒0.0030.003 秒

内存性能分析

对于内存性能分析,我们记录了 /usr/bin/time -v 报告的最大居住集大小。

对于网络语料库,最大的图片本身就决定了最大内存使用量。为了更好地定义内存测量,我们使用单张照片(图 1)来概述内存使用情况。而相应的图形图片也会显示类似的结果。

我们分别在 -q 0 -m 1 和 -q 95(默认值为 -m)下测量了 libpng 和 ZopfliPNG 的 10 到 19 MiB,以及 WebP 无损编码的 25 MiB 和 32 MiB。

在解码实验中,convert -resize 1x1 对 libpng 和 ZopfliPNG 生成的 PNG 文件使用 10 MiB。使用 cwebp 时,WebP 无损解码使用 7 MiB,而有损解码使用 3 MiB。

总结

研究表明,编码和解码速度与 PNG 相同。编码阶段内存使用量的增加,但解码阶段显示健康的下降情况,至少是比较 cwebp 和 ImageMagick 的转化行为时。

压缩率更适合超过 99% 的网页图片,这表明用户可以相对轻松地将图片从 PNG 更改为 WebP。

使用默认设置运行 WebP 时,其压缩率比 libpng 高 42%,比 ZopfliPNG 好 23%。这表明 WebP 承诺可加快处理包含大量图片的网站。

参考编号

  1. ImageMagick
  2. Pngcrush
  3. ZopfliPNG

前端知识体系 · wcrane