我是新手,我想为某些图像操作创建绘画类。我正在使用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()
图像上应该有饼形和部分切成圆形的形状,但是我得到的只是一张空白的白色图像。
答案 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)
然后您得到以下结果: