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)的位置画一个40x40像素的椭圆。但是图像什么都没有显示。
不过,这段代码是可以正常工作的:
draw.ellipse ((0,0,40,40), fill=128)
我发现,当我改变椭圆应该放置的前两个坐标时,如果这些坐标的值大于椭圆的大小,它就不会工作。例如:
draw.ellipse ((5,5,15,15), fill=128)
这个是可以的,但只显示了矩形的一部分。而
draw.ellipse ((5,5,3,3), fill=128)
这个根本什么都不显示。
画矩形的时候也是这样。
2 个回答
3
ellipse函数可以在一个边界框内画出一个椭圆。所以你需要使用像draw.ellipse((40,40,60,60))
这样的代码,或者其他坐标,确保左上角的坐标比右下角的坐标小。
22
边界框是一个包含四个数字的元组 (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
):