首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用PIL获取PNG图像的Alpha值?

如何用PIL获取PNG图像的Alpha值?
EN

Stack Overflow用户
提问于 2009-12-26 15:15:37
回答 5查看 43.4K关注 0票数 28

如何使用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包已经安装好了。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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。

票数 55
EN

Stack Overflow用户

发布于 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")
票数 6
EN

Stack Overflow用户

发布于 2009-12-26 15:31:15

img.info是关于整个图像的-- RGBA图像中的alpha值是以像素为单位的,所以它当然不会在img.info中。给定一个坐标作为参数,图像对象的getpixel方法将返回一个元组,其中包含该像素的(在本例中为四个)波段的值--元组的最后一个值将是A,即Alpha值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1962795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档