跳转到内容

读取、导出与格式转换

复制本页

输入文件是 input.jpg,输出文件是 output.webp。下面的代码展示各 binding 的形状;参考输出已经由 govips 实际生成并完成格式与尺寸检查。

夜色中亮起红色轮廓灯的苏州东方之门建筑与前景步道
输入:JPEG1938 × 1292,610,191 bytes
保持原尺寸并转换为 WebP 的苏州东方之门夜景
参考输出:WebP1938 × 1292,399,106 bytes,quality 82

四个 binding 均已执行格式和尺寸检查;不同 libvips 版本产生的编码字节不要求完全一致。

package main
import (
"fmt"
"os"
"github.com/davidbyttow/govips/v2/vips"
)
func main() {
if err := vips.Startup(nil); err != nil {
return err
}
defer vips.Shutdown()
image, err := vips.NewImageFromFile("input.jpg")
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer image.Close()
params := vips.NewWebpExportParams()
params.Quality = 82
data, _, err := image.ExportWebp(params)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
if err := os.WriteFile("output.webp", data, 0o644); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}

格式转换包含解码与重新编码。输出质量、元数据、ICC Profile、Alpha、动画页数和编码器可用性都可能变化。Quality = 100 或 Q=100 也不等于无损模式;无损是单独的编码选择。