2013-08-16 66 views
1

我有以下代碼:繪製多邊形過頂在Python枕頭/ PIL彼此

im = Image.new("RGBA", (800,600)) 
draw = ImageDraw.Draw(im,"RGBA") 
draw.polygon([(10,10),(200,10),(200,200),(10,200)],(20,30,50,125)) 
draw.polygon([(60,60),(250,60),(250,250),(60,250)],(255,30,50,0)) 
del draw 
im.show() 

但多邊形沒有表現出之間的α/透明度的任何變化。是否可以使用這些多邊形來做到這一點,或者alpha級別只適用於合成圖像(我知道這個解決方案,但只看到基於PIL的評論,並認爲我已經看到這在Pillow中修復了)。

如果這樣的東西不存在,那麼在圖書館中放置類似這樣的東西是否有一種不錯的,簡單而有效的方式?

回答

4

據商務部http://effbot.org/imagingbook/image.htm

im.show()

顯示圖像。該方法主要用於調試 目的

在Unix平臺上,此方法將圖像保存到臨時PPM 文件,並調用xv實用程序。

而且據我所知,PPM file format確實支持透明度( 「alpha通道」)。


所以...當你調用im.show()透明度不出現 - 但它將應用如果您使用的格式,確實支持透明度保存文件:

from PIL import Image,ImageDraw 

im = Image.new("RGBA", (800,600)) 
draw = ImageDraw.Draw(im,"RGBA") 
draw.polygon([(10,10),(200,10),(200,200),(10,200)],(20,30,50,125)) 
draw.polygon([(60,60),(250,60),(250,250),(60,250)],(255,30,50,120)) 
del draw 

im.save("out.png") # Save to file 
+0

即使PPM確實支持透明度,如果您在純灰色窗口中顯示具有部分透明度的圖像...您只會獲得部分灰色像素。 – abarnert

+0

無論如何,有一個PPM與透明度例外,但它永遠不會去任何地方,如16bpp擴展。如果你想要任何東西,你必須使用PAM代替。沒有人會這麼做,因爲使用像PNG這樣的交換和用於內部存儲的自定義格式更容易。 – abarnert

+1

此方法僅將alpha應用於最終圖像,即透明正方形繪製在另一個透明正方形的頂部,但下方的正方形仍被遮擋。雖然至少現在我有透明度感謝。 – user1170304