通过python、numpy理解png alpha通道(透明)原理

需要掌握:

  • python、PIL库
  • numpy

下一篇:通过python、numpy理解png贴图的透明原理

介绍

png图片具有透明效果,这是诸多图片格式中一大特点

png图片有4个通道,RGB通道和alpha通道,alpha通道是透明信息

本文通过 PIL 和 numpy 理解png图片的RGBA通道

准备图片

下面png图片,四周是透明,中间是个猪头

代码

读取png图片

from PIL import Image
import numpy as np

png=Image.open("/Users/mym/Desktop/可删除/pig.png")

arr=np.array(png)

print(arr.shape)

执行结果:

(650, 650, 4)

因为 png是rgba4通道图,所以转成矩阵后最后一个维度是4

分别读取rgb通道 和 alpha 通道

png_rgb=arr[:,:,:3]
print(png_rgb.shape)
png_a=arr[:,:,3]

将rgb通道转成图片,并显示

Image.fromarray(png_rgb)

执行结果是普通的 rgb 三通道图片,这里没有上传

将 alpha 通道转成图片,并显示

那么将alpha通道转成图片,会是什么样?

我们将 alpha 通道转成图片,并显示

Image.fromarray(png_a)

执行结果如下:

透明的部分显示成 黑色,不透明的部分显示成 白色

打印 alpha 通道矩阵

print(png_a)

执行结果:

[[0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]]

也就是说透明部分是0,不透明部分是255,中间还有过渡值


原文出处:/show_1EF5RBxcyfIV.html