Как я могу использовать модуль ImageDraw для класса, который инициализируется с использованием объекта Image - PullRequest
2 голосов
/ 18 мая 2019

Я новичок в классах, и я хотел сделать класс рисования для некоторых манипуляций с изображениями. Я делаю это с модулем ImageDraw в PIL. Я инициализировал атрибут draw с помощью объекта Image, а затем попытался нарисовать изображение, используя ImageDraw. Однако я не смог получить никаких результатов. Было бы замечательно, если бы кто-то сказал мне, где я испортил

#shapemakers.py
import PIL
from PIL import ImageDraw
import random

class drawings():

    def __init__(self,img):
        self.image=img
        self.draw=ImageDraw.Draw(self.image,'RGB')

    def circledraw(self,x,y,r):
        cord1_x=x-r
        cord2_x=x+r
        cord1_y=y-r
        cord2_y=y+r
        return((cord1_x,cord1_y,cord2_x,cord2_y)

    def arcer(self):
        x=0
        y=36
        while x<360:
            p=random.randint(60,120)
            self.draw.arc(self.circledraw(360,821,60), x, y, 'red',width=20)
            self.draw.pieslice(self.circledraw(360,821,p), x+36, y+36, 'yellow',width=1)
            x=y+36
            y=x+36
        return self.image

Так я использую класс

import PIL
import shapemakers
newimg=PIL.Image.open('infocard-fm1.png')
newdrawing=shapemakers(newimg)
p=newdrawing.arcer()
p.show()

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

1 Ответ

0 голосов
/ 19 мая 2019

Я вижу только пару незначительных проблем.

Я бы заменил эту строку:

newimg=PIL.Image.open('infocard-fm1.png')

на

newimg=PIL.Image.open('infocard-fm1.png').convert('RGB')

, чтобы выне получайте "несоответствие режима" , если вы загружаете изображение на основе палитры однажды.В общем, если вы ожидаете изображение в режиме RGB, вам следует преобразовать его в RGB, в противном случае у вас возникнут проблемы с изображениями палитры и изображениями с альфа-каналами.


Вы пропускаете закрытиеСкобки в этой строке:

return((cord1_x,cord1_y,cord2_x,cord2_y)

Вам необходимо заменить эту строку:

newdrawing=shapemakers(newimg) 

на:

newdrawing=shapemakers.drawings(newimg)

Тогда вы получитеэтот результат:

enter image description here

...