我似乎在使此代码正常工作时遇到了一些麻烦:
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 x 40像素的椭圆。图像不返回任何内容。
这段代码可以正常工作:
draw.ellipse ((0,0,40,40), fill=128)
似乎当我更改前两个坐标(应放置椭圆的位置)时,如果它们大于要绘制的椭圆的大小,它将不起作用。例如:
draw.ellipse ((5,5,15,15), fill=128)
可行,但仅显示rect的一部分。然而
draw.ellipse ((5,5,3,3), fill=128)
什么也没显示。
绘制矩形时也会发生这种情况。
最佳答案
边界框是一个四元组(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
):关于Python PIL : How to draw an ellipse in the middle of an image?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4789894/