用python画值日表

本文介绍如何利用Python的PIL库制作值日表,包括取星期几、读取值日人员名单、字符串居中绘制及图片保存,旨在熟悉Image, ImageDraw, ImageFont的使用。" 83629414,7242832,Python Featuretools自动化特征工程实战,"['Python库', '特征工程', '数据挖掘', '机器学习', '预测模型']
摘要由CSDN通过智能技术生成

目的:学习通过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 + 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值