【发布时间】:2019-01-29 15:11:10
【问题描述】:
我正在尝试创建在透明背景上绘制的半透明形状的图像。由于某种原因,这些形状并没有保持透明,而是完全覆盖了它们下面的形状。我的代码:
from PIL import Image, ImageDraw
img = Image.new("RGBA", (256, 256), (255,0,0,127))
drawing = ImageDraw.Draw(img, "RGBA")
drawing.ellipse((127-79, 127 - 63, 127 + 47, 127 + 63), fill=(0, 255, 0, 63), outline=(0, 255, 0, 255))
drawing.ellipse((127-47, 127 - 63, 127 + 79, 127 + 63), fill=(0, 0, 255, 63), outline=(0, 0, 255, 255))
img.save("foo.png", "png")
我希望结果看起来像(除了背景不透明):
但看起来像:
当我尝试使用img.save("foo.gif", "gif") 将其保存为 GIF 时,结果更糟。圆圈是实心的,轮廓和填充没有区别。
【问题讨论】:
-
ImageDraw.Draw不进行混合,它用新像素替换像素。做你想做的事需要两个步骤——在空白画布上不透明地绘制,然后合成结果。有一个example in the documentation 绘制部分不透明的文本。我对相关问题的answer 有另一个例子。
标签: python python-imaging-library