12

我似乎在让这段代码工作时遇到了一些麻烦:

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)

似乎当我更改前 2 个坐标(用于放置椭圆的位置)时,如果它们大于要绘制的椭圆的大小,它将不起作用。例如:

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

有效,但只显示部分矩形。然而

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

什么都没有显示。

绘制矩形时也会发生这种情况。

4

2 回答 2

20

边界框是一个 4 元组(x0, y0, x1, y1),其中(x0, y0)是框的左上边界和框(x1, y1)的右下边界。

要将椭圆绘制到图像的中心,您需要定义您希望椭圆的边界框有多大(变量eXeY下面的代码片段)。

话虽如此,下面是一个将椭圆绘制到图像中心的代码片段:

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 输出.png

于 2011-01-25T07:28:48.097 回答
3

ellipse 函数在边界框内绘制一个椭圆。所以你需要使用draw.ellipse((40,40,60,60))左上角小于右下角的其他坐标。

于 2011-01-25T04:19:11.827 回答