在PIL中制作PNG精灵,但希望保留alpha通道

时间:2011-09-18 20:16:32

标签: python image image-processing png python-imaging-library

我正在创建一个脚本来抓取一堆favicon,将它们转换为png并从其中生成一个精灵图像。

有用的g.etfv.co将检测并转换PNG格式的favicons,我正在使用PIL将图像蒙太奇用于精灵表。

这一切都很好,除非我这样做时似乎失去了alpha透明度通道。

以下脚本生成的图像:enter image description here。注意应该是透明的黑色区域。

更新:现在以'RGBA'模式创建图像而不是'RGB'。生成的图像现在仅部分 borked:enter image description here。 OKCupid的图标看起来正确但是stackoverflow仍在丢失alpha通道。

更新:我注意到,在转换之前它会混淆的图像报告为RGB(不是RGBA)。

>>> print url, img.getbands()
http://stackoverflow.com/ ('R', 'G', 'B')
http://www.google.com/ ('R', 'G', 'B')
http://blog.okcupid.com/ ('R', 'G', 'B', 'A')

我做错了什么?

import urllib
import PIL.Image
import StringIO

favicon_base = 'http://g.etfv.co/'

icons = """
http://stackoverflow.com/
http://www.google.com/
http://blog.okcupid.com/
"""

icons = [icon.strip() for icon in icons.strip().splitlines()]

left = 0
right = 16
upper = 0
lower = 16

inew = PIL.Image.new('RGBA',(len(icons)*16,16))

for url in icons:
    favicon = urllib.urlopen(favicon_base + urllib.quote(url) + '?defaulticon=lightpng').read()

    img = PIL.Image.open(StringIO.StringIO(favicon))
    img = img.convert('RGBA')

    bbox = (left, upper, right, lower)
    inew.paste(img, bbox, img)

    left += 16
    right += 16


inew.save(open('blah.png', 'wb'), 'png', optimize=1)

1 个答案:

答案 0 :(得分:0)

结果图片inew没有Alpha频道。

更新:

陷阱>

inew = PIL.Image.new('RGBA',(len(icons)*16,16))