目的:学习通过python的PIL库来做图片的绘制,帮助熟悉Image,ImageDraw,ImageFont的使用
第一部分,需要用到的函数封装
1、取星期几:
days=[ '星期一', '星期二', '星期三', '星期四', '星期五', '星期六','星期日']
def WeekDayName(day=datetime.datetime.weekday(datetime.datetime.now())):
return days[day]
2、从文本文件中加载值日人员名单
文件记录格下如下:
D1=张三|李四|王麻子
说明,D代表单周(双周的话,我这里用的是“S"),1表现星期1,等于后面就是人员名单,通过”|“来分割
def LoadContents(DutyFile):
SMaxCount = 0
DMaxCount = 0
if(os.path.exists(DutyFile)):
with open(DutyFile, encoding="utf8") as f:
for line in f.readlines():
line = line.replace('\n','').encode('utf-8').decode('utf-8-sig')
if line !='' and line != None and line[0]!='#':
tmp = line.split("=")
key = tmp[0]
value = tmp[1]
if key == 'title':
self.Caption = value
else:
values = value.split('|')
self.Students[key] = values
if key[0] == 'D':
DMaxCount = len(values) if DMaxCount< len(values) else DMaxCount
elif key[0] =='S':
SMaxCount = len(values) if SMaxCount< len(values) else SMaxCount
#print(self.Students)
return SMaxCount,DMaxCount
这里返了两个值,代表单双周中,人数最多的一例。这里主要是文件的读写,没有什么特别的地方。
3、绘制字符串信息,这里为了美观,我把所有的文字都居中显示了
def DrawText(self,xy,text,font,color,draw):
x = xy[0] #起点坐标x
y = xy[1] #起点坐标Y
w = xy[2] #宽
h = xy[3] #高
text_size = draw.textsize(text,font)
x1 = x+(w / 2) - (text_size[0] / 2)
y1 = y+(h / 2) - (text_size[1] / 2)
draw.ink = color
draw.text((x1,y1), text, fill=None, font = font)
4、然后就是画图了,具体看代码
def Draw(self):
#1、加载值日人员数据
SMaxCount,DMaxCount=self.__LoadContents()
#2、计算需要的数据
weekNo = self.__CalcWeekNum()
iweekday = datetime.datetime.weekday(datetime.datetime.now())
weekdayName = self.__WeekDayName()
IfSingleWeek = True if weekNo % 2 == 1 else False
red = 255 +