【问题标题】:Python PIL: How to draw an ellipse in the middle of an image?Python PIL:如何在图像中间画一个椭圆?
【发布时间】:2011-06-14 23:07:47
【问题描述】:

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

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)

什么都不显示。

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

【问题讨论】:

    标签: python python-imaging-library ellipse


    【解决方案1】:

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

    要在图像的中心绘制一个椭圆,您需要定义您希望椭圆的边界框有多大(下面我的代码 sn-p 中的变量 eXeY)。

    话虽如此,下面是一段代码 sn-p,它在图像的中心绘制一个椭圆:

    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):

    【讨论】:

    • 谢谢 - 边界框的想法对我来说是新的,所以我在这里有点困惑。感谢您的精彩解释和示例:)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      相关资源
      最近更新 更多