当前位置:  开发笔记 > 编程语言 > 正文

你如何用Python绘制透明多边形?

如何解决《你如何用Python绘制透明多边形?》经验,为你挑选了2个好方法。

我正在使用PIL(Python Imaging Library).我想绘制透明多边形.似乎指定包含alpha级别的填充颜色不起作用.他们的解决方法是什么?

如果使用PIL无法完成,我愿意使用别的东西.

如果存在多个解决方案,则应考虑性能.绘图需要尽可能快.



1> 小智..:

这是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')

这将绘制两个三角形重叠的两种颜色混合.这比为每个多边形合成多个"图层"要快得多.



2> akdom..:

使用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数组表示上绘制多边形.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有