WebP
WebP是一种图片格式,它使用VP8关键帧编码,以有损方式压缩图像数据或WebP无损编码。
除了 WebP 的基本用例(即包含编码为 VP8 关键帧的单个图片的文件)之外,WebP 容器(即 WebP 的 RIFF 容器)还支持其他功能。WebP 容器提供 对以下各项的支持:
-
无损压缩:可以使用 WebP 无损格式对图片进行无损压缩。
-
元数据:图片中可能有存储于可交换图片文件中的元数据 格式 (Exif) 或可扩展元数据平台 (XMP) 格式。
-
透明度:图片可以具有透明度,即 alpha 通道。
-
颜色配置文件:图片可能具有如国际色彩联盟所述的嵌入式 ICC 配置文件。
-
动画:同一张图片可能包含多个帧,帧之间会暂停播放; 使其成为动画
在图片(和多媒体)文件格式中,RIFF 是一个容器格式,或者说是一种文件结构规范,而不是一种图片编码格式本身。
您可以把它理解为一个盒子或文件夹,里面可以装各种不同的东西(图片数据、音频数据、元数据等)。
RIFF
RIFF 的全称是 Resource Interchange File Format(资源交换文件格式),由微软公司在1991年提出。
它的核心思想是:所有数据都存储在称为“块(Chunks)”的结构中。
RIFF 文件的结构
一个典型的 RIFF 文件由以下几个部分组成:
- RIFF 头(Header):
- RIFF(4字节):固定标识,表明这是一个RIFF格式的文件。
- 文件大小(4字节):从下一个字节开始到文件结尾的总大小。
- 格式类型(4字节):用四个字符代码(FOURCC)定义文件的具体类型,例如 AVI或 WAVE。
- 块(Chunks):
在文件头之后,就是一系列的数据块。
每个块都有自己的头和信息:
- 块ID(4字节):用四个字符代码标识这个块是什么(例如 fmt是格式块,data是数据块)。
- 块大小(4字节):该块数据部分的大小。
- 块数据(可变长度):实际的数据内容。
- 列表块(LIST Chunks):
这是一种特殊的块,它本身内部又可以包含其他多个子块,用于更复杂的数据组织。
用个比喻来说:
一个 RIFF 文件就像一个行李箱(RIFF Container),上面贴着一个标签写着“摄影器材”(格式类型= PHOT)。箱子里面有几个收纳盒(Chunks),每个收纳盒上又贴着“镜头”、“机身”、“电池”等标签(块ID)。这样就可以井井有条地存放所有东西。
与图片格式的关系
RIFF 作为一种容器,被用于多种图片格式。最著名的例子就是WebP:
一个典型的 WebP 文件结构如下:
RIFF Header (标识这是一个RIFF文件,格式类型为 'WEBP')
|
+-- VP8 (或 VP8L, VP8X) Chunk (存储实际的图片编码数据)
|
+-- ANIM Chunk (可选,如果存在则表示是动画WebP)
|
+-- ANMF Chunk (可选,动画帧数据)
|
+-- EXIF Chunk (可选,存储EXIF元数据)
|
+-- XMP Chunk (可选,存储XMP元数据)
|
+-- ... (其他可选块)
WebP的强大之处在于它利用了RIFF容器的可扩展性,可以轻松的在一个文件中包含静态图、动画、Alpha透明度、元数据等多种信息。
简单来说:
- RIFF: 是一种文件结构或容器规范,可以比喻成行李箱
- JPEG、PNG: 是一种图片编码格式,可以比喻成一种折叠衣服的方法。注意PNG拥有自己独特的、与RIFF无关的容器结构。
- WebP: 使用RIFF容器来包装VP8编码数据的图片格式,可以比喻成用行李箱装了特定方法折叠好的衣服