2011-01-25 48 views
10

我似乎有一些麻烦此代码工作: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共ORDS(对于其中椭圆应放置),如果他们是比较大的,它不会工作要绘制的椭圆的大小。例如:

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

工程,但只显示矩形的一部分。而

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

什么也没有显示。

这也发生在绘制矩形时。

回答

15

边界框是一个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.jpgoutput.png

+0

谢谢 - 包围盒的想法对我来说是新的,所以我在这里有点困惑。感谢伟大的解释和例子:) – Tommo 2011-01-25 08:32:28

3

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