编解码:WebP协议
- 一 简介
- 二 协议
- 1 WebP文件头
- 2 数据块
- 3 拓展数据
- 4 动画
- ANIM 块
- ANMF块
- 5 ALPHA
- 6 颜色配置文件
- 7 元数据
- EXIF
- XMP
- 三 文件布局示例
- 1 采用 Alpha 格式的有损编码图片可能如下所示:
- 2 无损编码的图片可能如下所示:
- 3 具有 ICC 配置文件和 XMP 元数据的无损图片可能如下所示:
- 4 包含 Exif 元数据的动画图片可能如下所示:
一 简介
WebP 是一种新型的图片格式,使用 VP8 关键帧编码以有损方式压缩图片数据,或使用 WebP 无损编码,其无损图片的大小比 PNG 图片小 26% ,有损图片比采用等效 SSIM 质量索引的同类 JPEG 图片缩小 25-34%
无损 WebP 支持 Alpha 通道,带上Alpha通道后仅多 22%。在可以接受有损 RGB 压缩的情况下,有损 WebP 也支持透明度,其提供的文件大小通常比 PNG 小 3 倍。动画 WebP 图片均支持有损、无损和透明度,与 GIF 和 APNG 相比,这种格式可以减小文件大小
二 协议
1 WebP文件头
| ‘R’ | ‘I’ | ‘F’ | ‘F’ |
| File Size |
| ‘W’ | ‘E’ | ‘B’ | ‘P’ |
上述的统称为WebP文件头:WebP header,4个字节的文件FourCC(RIFF),4个字节的文件大小,4个字节的标识(WEBP),总计12个字节
2 数据块
| ‘V’ | ‘P’ | ‘8’ | ‘*’ |
| data |
上述统称chunk,若为有损压缩则编码FourCC为(”VP8 “),无损压缩则编码FourCC为(”VP8L“),L即LossLess,具体的data的编码协议则查阅相关文档 无损编码 有损编码
3 拓展数据
| ‘V’ | ‘P’ | ‘8’ | ‘X’ |
| 拓展数据 |
4个字节FounCC(”VP8X“)
拓展数据构成总计:4+3+3 = 12个字节
Rsv字段:2 位,置 0
ICC 配置文件 (I)字段:1 位,如果文件包含 ICC 配置文件,置1
Alpha (L)字段:1 位,如果图片的任何帧包含透明度信息 (“alpha”),置1
Exif 元数据 (E)字段:1 位,如果文件包含 Exif 元数据,置1
XMP 元数据 (X)字段:1 位,如果文件包含 XMP 元数据,置1
动画 (A)字段:1 位,如果这是动画图片,置1,则包含ANIM,ANMF块
保留 ®字段:1 位, 置0
预留字段:24 位,置 0
伪画布宽度:24 位, 实际的画布宽度需要此值再加1
伪画布高度:24 位, 实际画布高度需要此值再加1
画布宽度和画布高度的乘积不得超过 2^32 - 1
4 动画
ANIM 块
| ‘A’ | ‘N’ | ‘I’ | ‘M’ |
| background color |
| loop count |
4个字节FounCC(”ANIM“)
background color :4个字节,bgra背景色
loop count:2个字节,动画的循环次数,0 表示无限
ANMF块
| ‘A’ | ‘N’ | ‘M’ | ‘F’ |
| 数据 |
4个字节FounCC(”ANMF“)
FrameX:24 位 ,框架左上角的 X 坐标为 2倍该值
FrameY:24 位 ,框架左上角的 Y 坐标为 2倍该值
伪帧宽:24 位,帧宽度为此值 +1
伪帧高:24 位,帧高度为此值 +1
帧时长:24 位,显示下一帧前的等待时间,以 1 毫秒为单位
预留:6 位,置 0
混合方法 (B):1 位,指示当前帧的透明像素如何与上一画布的相应像素混合,0使用alpha混合,1不混合
处理方法 (D):1 位,指示在画布上显示当前帧之前(在渲染下一帧之前)如何处理当前帧,0不处置将画布保留原样;1处理为背景颜色,在当前帧覆盖的画布上,使用 ANIM 分块中指定的背景颜色填充矩形
帧数据:16 字节,包含帧的可选 Alpha 子区块、帧的比特流子分块(也就是上述的数据块)、可选的未知分块列表
5 ALPHA
| ‘A’ | ‘L’ | ‘P’ | ‘H’ |
| 数据 |
4个字节FounCC(”ALPH“)
Rsv:2 位,置 0
预处理 §:2 位,这些信息性位用于指示在压缩过程中执行的预处理。解码器可以使用这些信息(例如,在显示值之前抖动值或平滑渐变),0未进行预处理,1降低等级
过滤方法 (F):2 位,0无,1水平过滤器,2垂直滤镜
压缩方法 ©:2 位,0未压缩,1使用 WebP 无损格式进行压缩
Alpha 位流,数据块大小 :1 个字节
6 颜色配置文件
| ‘I’ | ‘C’ | ‘C’ | ‘P’ |
| Color Profile |
4个字节FounCC(”ICCP“)
此区块必须出现在图片数据之前。最多只能有 1 个此类分块。如果存在更多这样的区块,忽略除第一个区块之外的所有其他区块。如果此分块不存在,则应采用 sRGB
7 元数据
元数据可以存储在 EXIF’XMP 或数据块中。每种类型的数据块 (‘EXIF’ 和 'XMP ') 最多只能有一个块。如果有多个此类块,忽略除第一个块之外的全部块
EXIF
| ‘E’ | ‘X’ | ‘I’ | ‘F’ |
| Exif Metadata |
4个字节FounCC(”EXIF“)
XMP
| ‘X’ | ‘M’ | ‘P’ | ’ ’ |
| XMP Metadata |
4个字节FounCC(”XMP “)
三 文件布局示例
1 采用 Alpha 格式的有损编码图片可能如下所示:
WebP文件头
± VP8X (descriptions of features used)
± ALPH (alpha bitstream)
± VP8 (bitstream)
2 无损编码的图片可能如下所示:
WebP文件头
± VP8X (descriptions of features used)
± XYZW (unknown chunk)
± VP8L (lossless bitstream)
3 具有 ICC 配置文件和 XMP 元数据的无损图片可能如下所示:
WebP文件头
± VP8X (descriptions of features used)
± ICCP (color profile)
± VP8L (lossless bitstream)
± XMP (metadata)
4 包含 Exif 元数据的动画图片可能如下所示:
WebP文件头
± VP8X (descriptions of features used)
± ANIM (global animation parameters)
± ANMF (frame1 parameters + data)
± ANMF (frame2 parameters + data)
± ANMF (frame3 parameters + data)
± ANMF (frame4 parameters + data)
± EXIF (metadata)
参考官方说明