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 co-ords (для того, где должен быть помещен эллипс), это не будет работать, если они больше размера эллипса, который нужно нарисовать. Например:

draw.ellipse ((5,5,15,15), fill=128)

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

draw.ellipse ((5,5,3,3), fill=128)

вообще ничего не показывает.

это происходит и при рисовании прямоугольника.

2 ответов


прямоугольник-это 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.jpgoutput.png


функция эллипса рисует эллипс внутри рамка. Поэтому вам нужно использовать draw.ellipse((40,40,60,60)) или другие координаты, где верхний левый меньше, чем правый нижний.