>> fill = (200, 10, 10, 0.5)
對於RGBA模式的圖片,填充半透明色,alpha位置取值是0-255,妳希望50%,應該是用128,不是0。5
>> 我這裏畫了壹個比如三角形,準備再畫壹個三角形,也是半透明的,那麽這兩個顏色是可以混合起來的吧?
直接在同壹個Image上繪圖是不行的。後面畫的會直接覆蓋前面的,顏色不會自動融合。如果想要融合的效果,需要用Image.blend(im1, im2, 0.5)或者Image.composite(im1, im2, mask)其中mask需要帶alpha參數,可以設置為128.
#!/usr/bin/env?python2#?coding=utf-8
"""
draw?shapes?and?fill?shap?with?transparent?color?and?overlap?them.
"""
from?PIL?import?Image,?ImageDraw
def?main():
im?=?Image.new("RGBA",?(800,?800))
draw?=?ImageDraw.Draw(im)
draw.rectangle((0,?0,?200,?200),?fill=(255,?0,?0,?128))
draw.rectangle((400,?400,?600,?600),?fill=(255,?0,?0))
im2?=?Image.new("RGBA",?(800,?800))
draw2?=?ImageDraw.Draw(im2)
draw2.rectangle((100,?100,?300,?300),?fill=(0,?255,?0,?128))
draw2.rectangle((500,?500,?700,?700),?fill=(0,?255,?0))
#?merge?two?images?using?blend
blend?=?Image.blend(im,?im2,?0.5)
#?drawf?=?ImageDraw.Draw(blend)
#?drawf.rectangle((500,?100,?600,?200),?fill=(255,?0,?0))
#?drawf.rectangle((600,?200,?700,?300),?fill=(0,?255,?0))
blend.save("/home/sylecn/d/blend.png")
#?merge?two?images?using?composite
ones?=?Image.new("RGBA",?(800,?800))
_draw?=?ImageDraw.Draw(ones)
_draw.rectangle((0,?0,?800,?800),?fill=(255,?255,?255,?128))
final?=?Image.composite(im,?im2,?ones)
final.save("/home/sylecn/d/composite.png")
if?__name__?==?'__main__':
main()