正文
V_PRED(Vertical-垂直预测):使用 Block 上边的一行 Above 来填充 Block 中的每一行;
DC_PRED(Average-均值预测):使用 Left 和 Above 中所有像素的平均值作为唯一的值填充 Block;
TM_PRED(TrueMotion-运动预测):使用渐进的方式,记录上面一行的渐进差,以同样的差值,以 Left 为基准拓展每一行。
Figure 1: 帧内预测模型
除了三种宏块通用的四种模型之外,对于 4x4 的亮度块,还有额外的 6 种近似于水平和垂直预测的模型,可以在示意图中找到。
据官方介绍,WebP 有损压缩优于JPEG 算法的原因主要有三点,除了上面介绍的预测编码之外,自适应分块策略通过将图像划分为若干个(默认是 4 )视觉效果相近的区域,每个区域根据其特性个性化设置压缩参数(例如量化步长);最后相对于 JPEG 采用的哈夫曼编码,WebP 的布尔算术编码也带来了额外 5%-10% 的压缩比。
业务应用和兼容性
在业务普及上,Google 的 Youtube、Gmail、Google Play 等产品都已经应用了 WebP 格式,其应用商店也早已经完全使用了 WebP,除此之外,国外如 Facebook,ebay 等巨头,国内如淘宝,腾讯等一线公司都已经在使用 WebP 作为新的图像格式。
兼容性上,对于目前据统计,
目前全球约有 73.35%, 国内约 60.67% 的用户可以直接体验 WebP。
除了本家兄弟 Chrome(23+) 和 Android (4.0+)支持 WebP 之外,QQ 和 UC 等基于 Chromium 内核的浏览器也支持,并且对于移动端,除了 Android 4.0 以上版本对 WebP 的原生支持以外,其他版本和 iOS 也可以通过官方提供的解析库支持 WebP:Android 和 iOS,并且 Safari 和 Firefox 也都有支持的 WebP 的计划,对于动态 WebP,目前 Chrome 32+ 和 Opera 19+ 已经有支持,详细数据请参考:兼容性神器 [3]。
对比测试
通过上述的调研,我们最后选取了 WebP 作为图像业务优化的方向,并通过一系列测试和现有的 JPEG 编码器做对比。对于传统的 JPEG 编码实现,主要包括 Libjpeg-turbo 和 Mozjpeg,其中 Libjpeg-turbo 是经典 Libjpeg 的复刻,采用单指令流多数据流(SIMD)指令来加速JPEG编码和解码基础效率,也就是优化传统算法的编解码速度,目前许多地方使用的 Libjpeg 大多是指 Libjpeg-turbo,Mozjpeg 则是 Libjpeg-turbo 的复刻,旨在通过减少文件大小(约10%)来加快网页的加载时间,以及在不改变图像质量的前提下提高编码效率,因此这里对比将会同时考虑这两种编码器:Libjpeg-turbo version 1.5.1 和 Mozjpeg version 3.1; WebP 使用的则是 Libwebp-0.6.0。
为了衡量不同编码器的压缩效果,我们采用 SSIM(结构相似性)作为图像质量指标,数值介于 0-1 之间,压缩后图像质量越高,和原图的 SSIM 越接近于 1,可以用来表示图像压缩前后的相似度/失真度,这是一种公认的比 SNR 更好的质量标准。需要说明的是,Guetzli 使用的 Butteraugli 指标是基于人眼对图像的视觉效果的一种度量器,本身是一种很符合肉眼的一种标准,但是由于该指标的正确性和成熟度有待论证,所以这里也就没有选择其作为衡量质量的手段。
我们从压缩比,压缩时间,压缩质量三个维度对比这三种编码器,为了尽可能接近线上真实需求,测试场景为电商服务(随机抓取 100 张 JPEG 图像)和广告服务(随机抓取 50 张 JPEG 图像),测试环境为 macOS Sierra V10.12,2.5 GHz Intel Core i7 处理器,内存为 16 GB 1600 MHz DDR3。
测试一:单位像素比特数-SSIM
测试方法:
-
利用三种编码器分别将 JPEG 原图在所有可选 Quality 参数下压缩,记录图像 BPP (bits per pixel) 和 SSIM 数值,其中 Mozjpeg 和 Libjpeg-turbo 均加上参数 “-optimize”,其余使用默认值,WebP 除 “-q” 外,其余使用默认值;
-
根据 BPP 和 SSIM 的对应关系绘图。
电商服务
电商图片集合按照大小一分为二,分开对比,以考量不同图像大小对编码器编码性能的影响:
AVG File Size=803.38KB
Figure 2: BPP-SSIM
AVG File Size=72.27KB
Figure 3: BPP-SSIM
广告服务
AVG File Size=322.49KB