📦 Android 静态图片格式选型指南
| 格式 | 压缩方式 | 透明通道 | 体积 | 解码速度 | 适用场景 | 推荐指数 |
|---|---|---|---|---|---|---|
| WebP | 有损 / 无损 | ✅ | 比 PNG 小 26%,比 JPG 小 30% | 中等 | 默认首选,适合绝大多数场景 | ⭐⭐⭐⭐⭐ |
| Vector Drawable | 矢量 | ✅ | 极小(1~3KB) | 较慢(CPU 绘制) | 纯色 / 简单渐变的扁平图标 | ⭐⭐⭐⭐⭐ |
| JPG / JPEG | 有损 | ❌ | 小 | 快(硬件加速) | 极低端机型的启动页 / 全屏背景 | ⭐⭐⭐ |
| AVIF | 有损 / 无损 | ✅ | 比 WebP 再小 50% | 慢(需软解) | Android 12+ 高端机型的大图 | ⭐⭐⭐⭐ |
| PNG | 无损 | ✅ | 大 | 中等 | 仅限 < 5KB 的小图标,或作为 9-Patch 的源文件 | ⭐⭐ |
| 9-Patch (.9.png) | 无损(PNG 扩展) | ✅ | 比 PNG 略大 | 中等 | 聊天气泡、按钮背景等需要局部拉伸的 UI | ⭐⭐⭐⭐ |
📐 选型决策树
┌─────────────────────────┐
│ 这是一张什么图? │
└────────────┬────────────┘
│
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
【UI 图标/元素】 【照片/大图】 【需要拉伸的背景】
│ │ │
▼ ▼ ▼
是否需要拉伸? 是否需要透明? 使用 9-Patch
│ │ │
┌────┴────┐ ┌────┴────┐
▼ ▼ ▼ ▼
是 否 是 否
│ │ │ │
▼ ▼ ▼ ▼
9-Patch 是否纯色? WebP 无损 是否极低端机型?
│ │ │ │
┌────┴────┐ ┌────┴────┐
▼ ▼ ▼ ▼
是 否 是 否
│ │ │ │
▼ ▼ ▼ ▼
Vector WebP 无损 保留 JPG WebP 有损
(解码快) (质量 85)
🛠️ 转换工具清单
| 目标格式 | 推荐工具 | 使用方式 |
|---|---|---|
| PNG/JPG → WebP |
cwebp 命令行 |
cwebp -q 85 input.png -o output.webp |
| PNG/JPG → WebP | Android Studio 内置 | 右键图片 → Convert to WebP |
| PNG → AVIF |
avifenc 命令行 |
avifenc --min 0 --max 0 -s 8 input.png output.avif |
| PNG → Vector | Android Studio Vector Asset | New → Vector Asset → Local SVG |
| 9-Patch 制作 | Android Studio 9-Patch 编辑器 | 右键 .9.png → Create 9-Patch |
| PNG 有损压缩 | TinyPNG(在线) | tinypng.com |
| 多格式对比预览 | Squoosh(在线) | squoosh.app |
🎙️ 总结
“我们在静态图片的格式选型上,遵循一套清晰的决策标准:
- 默认首选 WebP,同时支持有损/无损和透明通道,体积比 PNG 小 26%、比 JPG 小 30%;
- 纯色扁平图标用 Vector Drawable,体积只有 1~3KB,无限缩放不失真;
- PNG 只保留小于 5KB 的小图标,其余全部迁移到 WebP;
- JPG 只在极低端机型的启动页等场景保留,因为硬件解码速度最快;
- AVIF 作为未来方向,目前在 Android 12+ 的高端机型上试点;
- 需要拉伸的背景图固定使用 9-Patch。
转换时主要用 Android Studio 内置工具、cwebp 命令行 和 Squoosh,通过
Analyze APK验证收益。”