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