格式与 Codec 支持矩阵
选择输出格式前,先明确一个事实:读取决于 libvips 编译时包含的 loader,写取决于 native exporter。 各格式支持不是 binding 的属性,而是底层 libvips 的能力。
参考 binding(libvips 8.17.3 / govips v2.19.0)的导出能力
Section titled “参考 binding(libvips 8.17.3 / govips v2.19.0)的导出能力”govips ImageRef 提供以下 Export* 方法,代表 libvips 8.17.3 的原生写支持(取自 v2.19.0 源码):
| 导出 | 方法 |
|---|---|
| JPEG | ExportJpeg |
| PNG | ExportPng |
| WebP | ExportWebp |
| AVIF | ExportAvif |
| HEIF | ExportHeif |
| GIF | ExportGIF |
| TIFF | ExportTiff |
| JPEG 2000 | ExportJp2k |
| JPEG XL | ExportJxl |
| 其它(magick) | ExportMagick |
读取由 LoadImageFromFile / LoadImageFromBuffer 自动按格式 dispatch 到 libvips 编译进来的 loader。因此:
- 读支持范围 = 你那份 libvips 编译时包含的 loader 集合。
- 若某种格式没有 native loader,govips 可能落到 Go 标准库
image回退解码器——此时需要对应的 side-effect import(见故障排查 missing-codec)。 - 检测动图/特殊格式可能需要较新 libvips(见 missing-codec 中
isAVIF的已知缺陷)。
常见格式速览
Section titled “常见格式速览”| 格式 | 读(参考) | 写(参考) | 备注 |
|---|---|---|---|
| JPEG | 支持 | ExportJpeg |
有损;含 EXIF/ICC |
| PNG | 支持 | ExportPng |
无损;支持 alpha |
| WebP | 支持 | ExportWebp |
有损/无损;支持动画 |
| AVIF | 支持 | ExportAvif |
有损;动画识别有版本身份 |
| HEIF/HEIC | 支持 | ExportHeif |
高位深 |
| GIF | 支持 | ExportGIF |
调色板;质量参数边界见 gif-quality |
| TIFF | 支持 | ExportTiff |
多页 |
| JPEG XL | 支持 | ExportJxl |
视 libvips 编译配置 |
| JPEG 2000 | 支持 | ExportJp2k |
视 libvips 编译配置 |
| 读(pdfload) | 经 magick/native | 写无专用 Export* 方法 |
|
| BMP | 读为主 | 经 magick | 可能走 Go 兜底解码器 |
上表基于参考实现(libvips 8.17.3);sharp 捆绑的 8.18.7 与其格式能力可能不同,pyvips/CLI 与系统 8.17.3 一致。其它 binding 的行标为 comparison-pending,未经共享 Runner 逐字验证。
- 动图 / 多页:加载全部页见 animation-multi-page;GIF 质量参数见 gif-quality。
- 色彩 / ICC:CMYK 与 ICC 见 colour-shift;WebP 丢 ICC 是已知边界。
- 无 native 格式:见 missing-codec,确认 Go side-effect import 与 libvips 编译配置。
- 格式是否可用高度依赖你的 libvips 构建,而不是这本手册的版本快照。
- 不要仅因为参考实现支持某导出,就假定 sharp 或 pyvips 在默认配置下行为一致。
- govips v2.19.0 源码(
image_export.go的Export*方法)。 - 本手册故障排查 missing-codec / animation-multi-page / gif-quality / colour-shift。
本页为版本快照,复核日期 2026-10-11;格式能力随 libvips 构建而变化。