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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

如何检测PNG图像是否具有透明alpha通道或不使用PIL?

img = Image.open('example.png', 'r')
has_alpha = img.mode == 'RGBA'

通过上面的代码,我们知道PNG图像是否具有alpha通道,但不知道如何获得alpha值?

我没有在PIL网站上的 img.info字典中找到'透明'键

我使用Ubuntu和zlib1g,zlibc软件包已经安装。

提问于
用户回答回答于

要获得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时,需要使用转换方法,因为PIL中有一个bug。

用户回答回答于

可以通过将图像转换为字符串(例如,从图像中获取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")

扫码关注云+社区