如何使用PIL检测PNG图像是否有透明的alpha通道?
img = Image.open('example.png', 'r')
has_alpha = img.mode == 'RGBA'
通过上面的代码,我们知道PNG图像是否有alpha通道,不是没有,但如何获得alpha值?
我在img.info字典中找不到在PIL's website中描述的“透明”键
我使用的是Ubuntu和zlib1g,zlibc包已经安装好了。
发布于 2009-12-26 19:06:05
要获得RGBA图像的alpha层,您需要做的全部工作是:
red, green, blue, alpha = img.split()
或
alpha = img.split()[-1]
有一种方法可以设置alpha层:
img.putalpha(alpha)
透明键仅用于在调色板模式(P)中定义透明度索引。如果您还想涵盖调色板模式的透明度情况,并涵盖所有情况,可以这样做
if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
alpha = img.convert('RGBA').split()[-1]
注意:当image.mode为LA时,需要使用convert方法,因为在PIL中有一个bug。
发布于 2009-12-26 19:10:49
你可以通过'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")
发布于 2009-12-26 15:31:15
img.info
是关于整个图像的-- RGBA图像中的alpha值是以像素为单位的,所以它当然不会在img.info
中。给定一个坐标作为参数,图像对象的getpixel
方法将返回一个元组,其中包含该像素的(在本例中为四个)波段的值--元组的最后一个值将是A,即Alpha值。
https://stackoverflow.com/questions/1962795
复制相似问题