Calendar Maker Script (for Python) Pythonでカレンダーを作る
My wife pushed me to create a calendar of her design, but I couldn't find a good image, so I decided to make one as a programmer!
Here is the image.
And this is a code.
#Attention!
Holidays are Japanese ones. To know which day is holiday, I got "jholiday.py" from here.
Thank you "AddingBox"!!
Also you need to install PIL(Python Image Library).
""" CREATE LARGE CALENDER IMAGE
This code is created by tiid (http://makerwannabe.blogspot.com/)
This work is licensed under the Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
"""
import Image
from PIL import ImageFont, ImageDraw
from jholiday import holiday_name
from datetime import timedelta
import datetime
class CalenderImage() :
def __init__(self, width, height):
self.image = Image.new("RGB", (width,height), (255,255,255))
self.draw = ImageDraw.Draw(self.image)
self.font = ImageFont.truetype("/Library/Fonts/OsakaMono.ttf", 30)
self.monthFont = ImageFont.truetype("/Library/Fonts/OsakaMono.ttf", 40)
def setMergin(self, leftright, topbottom, month_height):
self.currenttop = topbottom + month_height
self.topbottom = topbottom
self.monthHeight = month_height
w,h = self.image.size
self.delta_h = (h - 2*topbottom - self.monthHeight)/31
self.delta_w = (w - 2*leftright) / 12
self.currentleft = leftright - self.delta_w
def drawDate(self, date, color):
self.draw.text((self.currentleft, self.currenttop), str(date),
fill=[(155,155,155), (155,155,255), (255,155,155)][color],
font = self.font)
font_w,font_h = self.font.getsize(str(date))
self.draw.line([(self.currentleft, self.currenttop+font_h),
(self.currentleft + self.delta_w*0.8 , self.currenttop+font_h)], fill=(155,155,155))
self.currenttop += self.delta_h
def changeMonth(self, date):
self.currentleft += self.delta_w
monthstr = [None,"Jan","Feb","Mar","Apr","May","Jun","Jly","Aug","Sep","Oct","Nov","Dec"][date.month]
font_w,font_h = self.monthFont.getsize(str(date.year))
if(date.month==1 or date.month==9):
self.draw.text((self.currentleft, self.topbottom),
str(date.year), fill=(155,155,155), font = self.monthFont)
self.draw.text((self.currentleft, self.topbottom+font_h),
monthstr, fill=(155,155,155), font = self.monthFont)
self.currenttop = self.topbottom + self.monthHeight
start_date = datetime.date(2011, 9, 1)
end_date = datetime.date(2012, 8, 31)
current_date = start_date
oneday = timedelta(1)
ci = CalenderImage(2481, 1755)
ci.setMergin(200, 100, 100)
while(current_date <= end_date):
if(current_date.day==1): ci.changeMonth(current_date)
holiday = holiday_name(date = current_date)
if(holiday != None): ## red color
ci.drawDate(current_date.day, 2)
elif(current_date.weekday()==5): ## saturday
ci.drawDate(current_date.day, 1)
elif(current_date.weekday()==6): ## sunday
ci.drawDate(current_date.day, 2)
else:
ci.drawDate(current_date.day, 0)
current_date += oneday
ci.image.show()
ci.image.save("calendar.bmp", "BMP")

Comments