四个入口的默认参数差异
很多人认为“相同输入 + 相同意图 = 相同输出”,但四个常用入口对同一意图暴露了不同的默认参数。最稳妥的工程假设是不存在逐字节一致;跨语言比较前请先核对默认值。
govips 参考默认值(v2.19.0)
Section titled “govips 参考默认值(v2.19.0)”NewWebpExportParams() 返回:
| 字段 | 默认值 |
|---|---|
Quality |
75 |
Lossless |
false |
NearLossless |
false |
ReductionEffort |
4 |
StripMetadata |
false |
TargetSize |
0(不启用) |
NewJpegExportParams() 返回:Quality 80、Interlace true。
NewGifExportParams() 返回:Quality 75、Effort 7、Bitdepth 8。注意 Quality 在原生 gifsave 下不生效(见GIF 的 Quality 参数为何不生效),Effort 与 Bitdepth 才真正影响输出。
与本手册实战示例的关系
Section titled “与本手册实战示例的关系”本手册的实战示例参考基线显式把 WebP 输出质量设为 82,这是显式传入的参数,不是 govips 的默认值(75)。
- 编解码 quality 语义:画质与体积的权衡在不同格式之间不同,
Quality数值不能跨格式直接等同于“清晰度”。 - 缩放语义:govips
Resize是相对比例系数(且需指定Kernel参数),与sharp.resize(w, h)的目标像素尺寸语义不同。 - 元数据默认行为:govips 中
StripMetadata默认为false,即默认保留并传递元数据(见转换后偏色、ICC 丢失或 CMYK 失真)。 - 动图页数:默认只加载第一帧(
n=1),处理动图需显式设置NumPages=-1(见动图只剩第一帧或变成纵向长图)。
为什么不能假定逐字节一致
Section titled “为什么不能假定逐字节一致”- sharp 0.35.5 预构建包自带 libvips 8.18.7,与系统参考版本 8.17.3 不同。
- pyvips 与 CLI 虽然和 govips 共用系统 libvips 8.17.3,但高层封装所传的默认参数仍需逐项确认。
- 当前跨入口验证主要核对格式、尺寸与通道数等元数据,像素级比较仍标注为
comparison-pending。
- 若你已经在代码中显式覆盖了所有相关编码与插值参数,默认值差异的影响就会大幅降低。
- 不同 libvips 版本之间的底层默认值也可能演进,生产升级时请勿只依赖本页快照。
- govips v2.19.0 源码(
NewWebpExportParams、NewJpegExportParams、NewGifExportParams的默认值)。 - 本手册验证环境基线(系统 libvips 8.17.3、sharp 自带 8.18.7)。
本页重点记录参考实现 govips 的默认值;sharp / pyvips / CLI 的跨版本默认行为对照标注为
comparison-pending。