2012-09-17 73 views
10

這是我的問題:PIL圖像模式 「P」 - > 「RGBA」

import Image 
im = Image.open("1.png") 
im.show() 
print im.mode 
im.convert("RGBA").save("2.png") 

那麼,與我的形象,你可以看到其中的差別。
我的問題是:如何正確轉換它?

圖片:original

結果:result

注:原始圖像具有半透明發光,結果有一個堅實的綠色「發光」

+0

你能否解釋一下是什麼問題,也許? – mwcz

+0

你實際上並沒有說出不同之處。您之前或之後包含的圖像是? –

+0

經過測試。沒有看到任何區別。你用什麼python和pil版本? –

回答

0

你的問題是,你不提供有關PIL應該用作ALPHA渠道來源的信息。

PIL不會爲您的圖像添加透明度。

你希望圖像的哪一部分是透明的?

+0

在原始「P」圖像中透明和/或半透明的部分:P並自動檢測,因爲這不是我需要轉換的唯一圖像... – mDroidd

+0

對不起,但對我而言,兩幅圖像看起來完全相同。你可以在第三個圖像上標記應該用紅色透明的部分嗎? –

3

不幸的是,您的PNG圖像是PIL無法很好處理的類型 - 帶有alpha通道的調色板圖像。當你打開圖像時,阿爾法被扔掉了,無法讓它恢復原狀。

這與通常的調色板透明度不同,調色板的一個索引用於表示完全透明的像素。

+0

相關地方看看:[PngImagePlugin tRNS加載器](https://github.com/python-imaging/Pillow/blob/master/PIL/PngImagePlugin.py#L527-529)它只讀取1個字節,而不是一個字母塊和[PNG tRNS規範](http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.tRNS)顯示它應該讀取一個塊,而不是單個值 – jterrace

0

你可以使用scipy.misc.imread

img = scipy.misc.imread(filename, mode='RGBA') 
img = Image.fromarray(img)