如何为使用Image对象初始化的类使用ImageDraw模块

时间:2019-05-18 17:48:51

标签: python-3.x class python-imaging-library

我是新手,我想为某些图像操作创建绘画类。我正在使用PIL中的ImageDraw模块进行此操作。 我使用Image对象初始化了draw属性,然后尝试使用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 :(得分:0)

我看到的只是几个小问题。

我将替换这一行:

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

使用

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

如果您一天加载基于调色板的图像,则不会出现“模式不匹配”​​ 。通常,如果您期望使用RGB模式的图像,则应转换为RGB,否则调色板图像和具有Alpha通道的图像会出现问题。


您在此行上缺少右括号:

return((cord1_x,cord1_y,cord2_x,cord2_y)

您需要替换以下行:

newdrawing=shapemakers(newimg) 

具有:

newdrawing=shapemakers.drawings(newimg)

然后您得到以下结果:

enter image description here