我正在使用PIL(Python Imaging Library).我想绘制透明多边形.似乎指定包含alpha级别的填充颜色不起作用.他们的解决方法是什么?
如果使用PIL无法完成,我愿意使用别的东西.
如果存在多个解决方案,则应考虑性能.绘图需要尽可能快.
这是Pillow,一个更加维护的PIL分支.http://pillow.readthedocs.org/
如果要绘制相对于彼此透明的多边形,则基本图像必须是RGB类型,而不是RGBA,并且ImageDraw必须是RGBA类型.例:
from PIL import Image, ImageDraw img = Image.new('RGB', (100, 100)) drw = ImageDraw.Draw(img, 'RGBA') drw.polygon([(50, 0), (100, 100), (0, 100)], (255, 0, 0, 125)) drw.polygon([(50,100), (100, 0), (0, 0)], (0, 255, 0, 125)) del drw img.save('out.png', 'PNG')
这将绘制两个三角形重叠的两种颜色混合.这比为每个多边形合成多个"图层"要快得多.
使用PIL绘制透明图像时我必须要做的是创建一个颜色图层,在其上绘制多边形的不透明图层,并将它们与基础图层合成,如下所示:
color_layer = Image.new('RGBA', base_layer.size, fill_rgb) alpha_mask = Image.new('L', base_layer.size, 0) alpha_mask_draw = ImageDraw.Draw(alpha_mask) alpha_mask_draw.polygon(self.outline, fill=fill_alpha) base_layer = Image.composite(color_layer, base_layer, alpha_mask)
使用Image.Blend时,我在绘制的多边形上有奇怪的轮廓行为问题.
这种方法的唯一问题是在绘制大量合理大小的多边形时性能很差.一个更快的解决方案就是"手动"在图像的numpy数组表示上绘制多边形.