Python PIL: Как рисовать произвольно закрашенные многоугольники - PullRequest
1 голос
/ 16 июня 2020

Мне интересно, есть ли способ в подушке , где я могу рисовать пользовательские заполненные многоугольники, я знаю, что могу рисовать прямоугольники и круги, как насчет пользовательских многоугольников.

В частности, Я хочу нарисовать что-то вроде изображения ниже: example img

Как я могу этого добиться, любые идеи. Спасибо

1 Ответ

0 голосов
/ 16 июня 2020

Я не известен своими графическими c дизайнерскими способностями или терпением возиться с эстетикой, но это должно дать вам представление:

#!/usr/bin/env python3

from PIL import Image, ImageDraw

# Form basic purple image without alpha
w, h = 700, 250
im = Image.new('RGB', (w,h), color=(66,0,102))

# Form alpha channel independently
alpha = Image.new('L', (w,h), color=0)

# Get drawing context
draw   = ImageDraw.Draw(alpha)
radius = 50
hline  = h-radius
OPAQUE, TRANSPARENT = 255, 0
# Draw white where we want opaque
draw.rectangle((0,0,w,hline), fill=OPAQUE)
draw.ellipse((w//2-radius,hline-radius,w//2+radius,h), fill=OPAQUE) 

# Draw black where we want transparent
draw.ellipse(((w//3)-radius,-radius,(w//3)+radius,radius), fill=TRANSPARENT)
draw.ellipse(((2*w//3)-radius,-radius,(2*w//3)+radius,radius), fill=TRANSPARENT)

# DEBUG only - not necessary
alpha.save('alpha.png')

# Put our shiny new alpha channel into our purple background and save
im.putalpha(alpha)
im.save('result.png')

enter image description here

Альфа-канал выглядит так - я искусственно добавил красную рамку, чтобы вы могли видеть ее размер:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...