通过python、numpy理解png alpha通道(透明)原理 作者:马育民 • 2020-04-30 11:17 • 阅读:10984 需要掌握: - python、PIL库 - numpy 下一篇:[通过python、numpy理解png贴图的透明原理](https://www.malaoshi.top/show_1EF5RClROWCa.html "通过python、numpy理解png贴图的透明原理") # 介绍 png图片具有透明效果,这是诸多图片格式中一大特点 png图片有4个通道,RGB通道和alpha通道,alpha通道是透明信息 本文通过 PIL 和 numpy 理解png图片的RGBA通道 # 准备图片 下面png图片,四周是透明,中间是个猪头 [![](https://www.malaoshi.top/upload/0/0/1EF5R6YBa9l0.png)](https://www.malaoshi.top/upload/0/0/1EF5R6YBa9l0.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) ``` 执行结果如下: [![](https://www.malaoshi.top/upload/0/0/1EF5RBhusMs7.jpg)](https://www.malaoshi.top/upload/0/0/1EF5RBhusMs7.jpg) 透明的部分显示成 **黑色**,不透明的部分显示成 **白色** 打印 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,中间还有过渡值 原文出处:http://malaoshi.top/show_1EF5RBxcyfIV.html