Tom*_*mmo 10 python ellipse python-imaging-library
我似乎在使这段代码工作时遇到了一些麻烦:
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()
Run Code Online (Sandbox Code Playgroud)
这应该在(60,60)绘制一个40 x 40像素的椭圆.图像什么都不返回.
这段代码工作正常:
draw.ellipse ((0,0,40,40), fill=128)
Run Code Online (Sandbox Code Playgroud)
看起来,当我改变前2个坐标(椭圆应该放置的位置)时,如果它们大于要绘制的椭圆的大小,它将不起作用.例如:
draw.ellipse ((5,5,15,15), fill=128)
Run Code Online (Sandbox Code Playgroud)
可以工作,但只显示部分矩形.而
draw.ellipse ((5,5,3,3), fill=128)
Run Code Online (Sandbox Code Playgroud)
什么也没显示.
绘制矩形时也会发生这种情况.
sah*_*hhm 15
边界框是一个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()
Run Code Online (Sandbox Code Playgroud)
这产生以下结果(1.jpg在左侧,output.png右侧):
