跳转到内容

Bands、Alpha 与透明度

复制本页

Alpha 通道是描述覆盖程度的额外 Band,但“有四个 Band”并不自动证明第四个就是 Alpha。图像解释(interpretation)、格式和元数据需要一起判断。

透明背景上的半透明紫色圆环、彩色圆点和白色对勾
输入:SVG720 × 480,透明背景
缩小后仍保留半透明边缘和透明背景的圆环图形
保留 Alpha:PNG240 × 160,4 bands,35,763 bytes
将透明圆环图形合并到淡紫色背景后的 WebP
Flatten:WebP240 × 160,3 bands,背景 #f0e6f2

棋盘格仅用于页面展示透明区域,不属于图片像素。

在常见的 8-bit RGBA 图像中,Alpha 值 0 表示完全透明,255 表示完全不透明。浮点图像或其他位深可能使用不同范围,所以不要把 0..255 写死到通用 Pipeline 中。

透明像素仍然保存颜色值。一个看不见的像素可以是“透明黑”或“透明白”,当它被缩放、模糊或合成时,这些隐藏颜色可能影响边缘。

预乘 Alpha(premultiplied alpha)会先用 Alpha 缩放颜色通道。某些卷积或插值操作在预乘表示上更可靠,但导出前通常要按目标编码器的预期恢复表示。

一个稳健的处理顺序通常是:

  1. 确认图像是否真的拥有 Alpha。
  2. 在需要的操作前 premultiply。
  3. 完成缩放、模糊或合成。
  4. unpremultiply。
  5. 按输出格式决定保留 Alpha 还是 flatten 到背景色。

本页的 govips 示例调用 Resize。在锁定的 v2.19.0 源码中,该方法会在缩放前执行 PremultiplyAlpha,并在缩放后执行 UnpremultiplyAlpha;这是经过版本核对的 binding 行为,不应推广成所有 binding 和所有操作的默认保证。