跳转到内容

通道、Alpha 与像素组合

复制本页

通道不是“颜色数组”的抽象细节。下面每项先展示实际输出,紧接着给出生成它的 binding 配置。

输出为单 band PNG,以灰度表示原图红色通道的强度。

以灰度显示红色通道强度的通道测试图
红色通道 · PNG640 × 360, 4,693 bytes, 1 bands

Generated with govips v2.19.0 / libvips 8.17.3.

if err := image.ExtractBand(0, 1); err != nil { return err }
return exportPNG(image, "red-channel.png")

Alpha 被导出为单 band PNG,便于检查遮罩本身,而不是把它当作 RGB 图像。

以灰度显示透明度的 Alpha 通道测试图
Alpha 通道 · PNG640 × 360, 5,301 bytes, 1 bands

Generated with govips v2.19.0 / libvips 8.17.3.

if err := image.ExtractBand(3, 1); err != nil { return err }
return exportPNG(image, "alpha-channel.png")

govips 代码显式拆分并 BandJoin;sharp 的 ensureAlpha() 保证输出含 Alpha,但不是同名的逐 band 组合 API。两种语义不应视为完全等价。

重新组合颜色与 Alpha 通道后的透明测试图
重新组合 RGBA · PNG640 × 360, 10,175 bytes, alpha, 4 bands

Generated with govips v2.19.0 / libvips 8.17.3.

bands, err := image.BandSplit()
if err != nil { return err }
defer closeAll(bands)
if err := bands[0].BandJoin(bands[1:]...); err != nil { return err }
return exportPNG(bands[0], "rebuilt-rgba.png")

以 #f8fafc 背景展平后输出 WebP;导出到不支持 Alpha 的格式前,应明确决定背景色。

在浅色背景上展平透明度后的通道测试图
展平透明度 · WEBP640 × 360, 3,672 bytes, 3 bands

Generated with govips v2.19.0 / libvips 8.17.3.

if err := image.Flatten(&vips.Color{R: 248, G: 250, B: 252}); err != nil { return err }
return exportWebp(image, "flattened.webp")

sharp 还提供 threshold()、boolean()、dilate()、erode() 等高层入口。govips 当前公开包装层没有这些同名入口,因此本页不把它们伪装成跨 binding 等价操作。