2011-09-18 59 views
0

我正在創建一個腳本來抓取一羣favicons,將它們轉換爲png,並將它們全部製作爲一個精靈圖像。在PIL中創建PNG精靈,但想保留Alpha通道

樂於助人的g.etfv.co將檢測和轉換favicon的PNG格式,和我使用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) 
+0

你有任何與此運氣? –

回答

0

結果圖像inew沒有alpha通道。

UPDATE:

嘗試

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

因此,他應該用'inew = PIL.Image.new('RGBA',(len(icons)* 16,16))來創建它嗎?或者是什麼? – agf

+0

剛剛嘗試過,奇怪它只修復了okcupid圖標,但是stackoverflow的仍然是borked。我會更新與該信息 –

+0

試圖這個問題,只有部分修復。更新的問題。 –