Как заполнить часть круга с помощью PIL? - PullRequest
1 голос
/ 03 июня 2010

Я пытаюсь использовать 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

Ответы [ 2 ]

1 голос
/ 03 июня 2010

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

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

1 голос
/ 03 июня 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...