jac*_*ack 21 python png image transparent python-imaging-library
如何使用PIL检测PNG图像是否具有透明的alpha通道?
img = Image.open('example.png', 'r')
has_alpha = img.mode == 'RGBA'
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,我们知道PNG图像是否具有alpha通道,但是如何获得alpha值?
我没有在PIL网站上描述的img.info字典中找到"透明度"键
我正在使用Ubuntu和zlib1g,已经安装了zlibc软件包.
Nad*_*mli 47
要获得RGBA图像的alpha层,您需要做的就是:
red, green, blue, alpha = img.split()
Run Code Online (Sandbox Code Playgroud)
要么
alpha = img.split()[-1]
Run Code Online (Sandbox Code Playgroud)
并且有一种设置alpha图层的方法:
img.putalpha(alpha)
Run Code Online (Sandbox Code Playgroud)
透明度键仅用于在调色板模式(P)中定义透明度索引.如果您想覆盖调色板模式透明度案例并涵盖所有情况,您可以执行此操作
if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
alpha = img.convert('RGBA').split()[-1]
Run Code Online (Sandbox Code Playgroud)
注意:当image.mode是LA时,需要转换方法,因为PIL中存在错误.
通过将图像转换为带有"A"模式的字符串,您可以一次性从整个图像中获取alpha数据,例如,此示例从图像中获取alpha数据并将其保存为灰度图像:)
from PIL import Image
imFile="white-arrow.png"
im = Image.open(imFile, 'r')
print im.mode == 'RGBA'
rgbData = im.tostring("raw", "RGB")
print len(rgbData)
alphaData = im.tostring("raw", "A")
print len(alphaData)
alphaImage = Image.fromstring("L", im.size, alphaData)
alphaImage.save(imFile+".alpha.png")
Run Code Online (Sandbox Code Playgroud)