PIL绘制半透明框
由于PIL的ImageDraw本身就算的RGBA的图片也不支持绘制半透明框的功能,就算是半透明的绘制,显示的效果也是全不透的,因此,我们只能借助alpha_composite
函数
- 先在空白的图片上画半透明框
- 将空白的图片与给定图片融合,得到新图片,新图片就是我们想要的结果
创建一个目标图片
bg_img = Image.new("RGBA", (256, 256), (0, 0, 255, 255))

绘制半透明框的函数
def drawRect(img, pos, **kwargs):
transp = Image.new('RGBA', img.size, (0,0,0,0))
draw = ImageDraw.Draw(transp, "RGBA")
draw.rectangle(pos, **kwargs)
img.paste(Image.alpha_composite(img, transp))
使用函数绘制两个框
drawRect(bg_img, (0,0,100,100), fill=(255,255,0,100))
drawRect(bg_img, (50,50,150,150), fill=(255,255,0,100))
bg_img.show()
完整代码
from PIL import Image, ImageDraw
bg_img = Image.new("RGBA", (256, 256), (0, 0, 255, 255))
def drawRect(img, pos, **kwargs):
transp = Image.new('RGBA', img.size, (0,0,0,0))
draw = ImageDraw.Draw(transp, "RGBA")
draw.rectangle(pos, **kwargs)
img.paste(Image.alpha_composite(img, transp))
drawRect(bg_img, (0,0,100,100), fill=(255,255,0,100))
drawRect(bg_img, (50,50,150,150), fill=(255,255,0,100))
bg_img.show()