如何使用PIL填充圆的一部​​分?

时间:2010-06-02 22:33:41

标签: python image python-imaging-library charts

我正在尝试将PIL用于任务,但结果非常dirty

我正在做的是尝试填充一个圆圈的一部分,正如您在image上看到的那样。

这是我的代码:

def gen_image(values):

    side = 568
    margin = 47
    image = Image.open(settings.MEDIA_ROOT + "/i/promo_circle.jpg")

    draw = ImageDraw.Draw(image)
    draw.ellipse((margin, margin, side-margin, side-margin), outline="white")

    center = side/2
    r = side/2 - margin

    cnt = len(values)

    for n in xrange(cnt):
        angle = n*(360.0/cnt) - 90
        next_angle = (n+1)*(360.0/cnt) - 90
        nr = (r * values[n] / 5)

        max_r = r
        min_r = nr

        for cr in xrange(min_r*10, max_r*10):
            cr = cr/10.0
            draw.arc((side/2-cr, side/2-cr, side/2+cr, side/2+cr), angle, next_angle, fill="white")

    return image

3 个答案:

答案 0 :(得分:1)

我使用PIL已经有一段时间了,但是在其他各种图形库中,绘制弧时经常会出现锯齿问题。

您是否尝试过使用较粗的线条进行消除锯齿或绘图?

[编辑] 快速查看PIL库,我认为你的线宽等是正确的。

这里最简单的方法就是建立一个覆盖每个区域的多边形。所以在每一端有一对点,然后在中间加一个负载,使边缘看起来像锯齿状。这有意义吗?

答案 1 :(得分:1)

不要用白色擦除,而应考虑绘制一个仅显示您想要显示的区域的面具。以下是圆形蒙版的示例。

How do I generate circular thumbnails with PIL?

答案 2 :(得分:0)

您可以在单独的图像上绘制一个圆,然后通过在该区域上创建一个三角形并将其从图像中删除(使其透明)来删除不需要的圆的切片。然后将这个圆弧段复制到所需的图像中。

如果要使用局部圆环,请绘制一个圆,然后从第一个圆开始绘制一个较小的圆,然后使用径向线制作一个三角形,以相同的方式去除不需要的部分。