欢迎光临
我们一直在努力

webp图像文件结构

WebP 是由 Google 开发的一种现代图像格式,旨在提供比 JPEG、PNG 和 GIF 更高效的压缩,同时支持有损压缩、无损压缩、透明通道(Alpha) 和动画。其文件结构基于 RIFF(Resource Interchange File Format) 容器。

在这里插入图片描述

一、总体结构:基于 RIFF

WebP 文件是一个 RIFF 容器,基本格式如下:

+——————-+
| RIFF Header (12B) |
+——————-+
| Chunk(s) |
+——————-+

RIFF Header(12 字节)

偏移长度内容说明
0 4 'RIFF' 固定 ASCII 字符串
4 4 file_size – 8 整个文件大小减去 8 字节
8 4 'WEBP' 格式标识符

注意:所有多字节整数均采用 小端序(Little-endian)


二、Chunk(数据块)

WebP 文件由一个或多个 Chunk 组成,每个 Chunk 格式如下:

偏移长度内容说明
0 4 Chunk FourCC 块类型标识(ASCII)
4 4 chunk_size 块数据长度(不包括头部 8 字节)
8 N data 实际数据(N = chunk_size)
8+N 0/1 padding 若 chunk_size 为奇数,则补 1 字节 0x00 对齐到偶数

FourCC 是 4 字节的 ASCII 标识符,如 'VP8 ', 'VP8L', 'VP8X' 等。


三、主要 Chunk 类型

1. VP8(有损压缩,无透明)

  • FourCC: 'VP8 '(注意末尾有一个空格)
  • 数据格式与 VP8 视频帧相同
  • 不支持 Alpha 通道
  • 典型用于替代 JPEG

2. VP8L(无损压缩,带透明)

  • FourCC: 'VP8L'
  • 支持有损/无损?→ 实际是无损压缩(L = Lossless)
  • 支持 Alpha 通道
  • 可用于替代 PNG(尤其小图)

3. VP8X(扩展格式,支持高级特性)

  • FourCC: 'VP8X'
  • 用于启用以下任一功能:
    • 动画(Animated WebP)
    • 透明(Alpha)
    • 超大尺寸(>16384 像素)
    • ICC 色彩配置文件
    • EXIF 元数据
    • XMP 元数据
  • VP8X 本身不包含像素数据,而是作为“容器头”,后面跟随其他 Chunk(如 ANMF、ALPH、VP8 等)
VP8X 头部结构(10 字节数据)
字节偏移长度说明
0 4 Flags(标志位)(小端)
4 3 Canvas Width – 1(图像宽度减 1,24 位)
7 3 Canvas Height – 1(图像高度减 1,24 位)
Flags(从 LSB 到 MSB):
位含义
0 保留(必须为 0)
1 ICC profile present
2 Alpha channel present
3 EXIF metadata present
4 XMP metadata present
5 Animation present(即包含 ANMF 块)
6–7 保留

如果设置了 Alpha 标志,则通常会有一个 ALPH Chunk;如果设置了 Animation 标志,则会有 ANMF Chunk。


四、其他重要 Chunk

ALPH(Alpha 通道数据)

  • 仅在 VP8X 模式下出现
  • 存储单独的 Alpha 通道(用于与 VP8 配合实现透明)
  • 压缩方式可选(无压缩、压缩等)

ANMF(动画帧)

  • 用于 Animated WebP
  • 每个 ANMF 块代表一帧
  • 包含:
    • 帧位置(x, y)
    • 帧宽高
    • 持续时间(ms)
    • 帧数据(可为 VP8 或 VP8L)

ICCP(ICC 色彩配置文件)

  • 存储 ICC profile(用于色彩管理)

EXIF / XMP

  • 存储元数据(与 JPEG 中类似)

五、典型 WebP 文件结构示例

示例 1:简单有损 WebP(类似 JPEG)

RIFF header
└── VP8 chunk

示例 2:带透明的无损 WebP

RIFF header
└── VP8L chunk

示例 3:带透明的有损 WebP(使用 VP8 + Alpha)

RIFF header
├── VP8X chunk(flags: Alpha=1)
├── ALPH chunk(Alpha 数据)
└── VP8 chunk(YUV 数据)

示例 4:Animated WebP

RIFF header
├── VP8X chunk(flags: Animation=1, Alpha=1?)
├── (可选) ICCP / EXIF / XMP
└── 多个 ANMF chunks
├── ANMF #1 → 包含 VP8 或 VP8L
├── ANMF #2 → …
└── …


六、关键特点总结

特性支持情况
有损压缩 ✅(VP8)
无损压缩 ✅(VP8L)
Alpha 透明 ✅(VP8L 或 VP8+ALPH)
动画 ✅(VP8X + ANMF)
元数据(EXIF/XMP) ✅(通过 VP8X + EXIF/XMP chunks)
ICC 色彩配置 ✅(ICCP chunk)
最大尺寸 默认 16383×16383,VP8X 可扩展至 ~2^24

七、工具与验证

  • 使用 webpinfo(来自 libwebp 工具包)可解析 WebP 结构:webpinfo image.webp
  • 在线查看:https://developers.google.com/speed/webp/docs/riff_container

赞(0)
未经允许不得转载:171主机测评 » webp图像文件结构
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址