Python PIL: Как нарисовать эллипс в середине изображения?
Кажется, у меня проблемы с получением этого кода:
import Image, ImageDraw
im = Image.open("1.jpg")
draw = ImageDraw.Draw(im)
draw.ellipse((60, 60, 40, 40), fill=128)
del draw
im.save('output.png')
im.show()
Это должно нарисовать эллипс в точке (60,60), который составляет 40 на 40 пикселей. Изображение ничего не возвращает.
Этот код работает отлично:
draw.ellipse ((0,0,40,40), fill=128)
Кажется, что когда я меняю первые 2 координаты (для которых нужно разместить эллипс), это не сработает, если они больше размера эллипса, который нужно нарисовать. Например:
draw.ellipse ((5,5,15,15), fill=128)
Работает, но только показывает часть прямоугольника. В то время как
draw.ellipse ((5,5,3,3), fill=128)
ничего не показывает.
Это происходит при рисовании прямоугольника.
Ответы
Ответ 1
Ограничивающий прямоугольник представляет собой 4-кортеж (x0, y0, x1, y1)
, где (x0, y0)
- верхняя левая граница поля, а (x1, y1)
- нижняя граница поля.
Чтобы нарисовать эллипс в центре изображения, вам нужно определить, насколько вы хотите, чтобы ограничивающий прямоугольник эллипса (переменные eX
и eY
в моем фрагменте кода ниже).
С учетом сказанного ниже приведен фрагмент кода, который рисует эллипс в центр изображения:
from PIL import Image, ImageDraw
im = Image.open("1.jpg")
x, y = im.size
eX, eY = 30, 60 #Size of Bounding Box for ellipse
bbox = (x/2 - eX/2, y/2 - eY/2, x/2 + eX/2, y/2 + eY/2)
draw = ImageDraw.Draw(im)
draw.ellipse(bbox, fill=128)
del draw
im.save("output.png")
im.show()
Это дает следующий результат (1.jpg
слева, output.png
справа):
![1.jpg]()
![output.png]()
Ответ 2
Функция эллипса рисует эллипс внутри ограничивающего прямоугольника . Поэтому вам нужно использовать draw.ellipse((40,40,60,60))
или другие координаты, где верхний левый размер меньше нижнего правого.