как заполнить часть круга с помощью PIL?

Я пытаюсь использовать PIL для задачи, но результат очень грязен.

То, что я делаю, пытается заполнить часть части круга, как Вы видите на изображении.

Вот мой код:

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

1
задан Josh Lee 2 June 2010 в 22:53
поделиться

2 ответа

Я давно не использовал PIL, но в различных других графических библиотеках часто возникает проблема сглаживания при рисовании дуг.

Пробовали ли вы включить сглаживание или рисовать более толстыми линиями?

[Edit] Бегло просмотрев библиотеку PIL, я думаю, вы правы насчет ширины линии и т.д.

Похоже, что проще всего построить многоугольник, который охватывает каждую область. То есть пара точек на каждом конце, а затем нагрузка в середине, чтобы края не выглядели неровными. Это имеет смысл?

1
ответ дан 3 September 2019 в 00:06
поделиться

Вместо стирания белым цветом попробуйте нарисовать маску только тех областей, которые вы хотите показать. Вот пример круглой маски.

Как сгенерировать круговые эскизы с помощью PIL?

1
ответ дан 3 September 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: