ぷちます!!が終わってしまった...夏のはじまりをあのカレンダーで迎えたい
ぷちます!!‐プチプチ・アイドルマスター‐ 第74話「食って寝て遊べ」 - ニコニコ動画:GINZA
終わってしまいました...ぷちます!!。
ぷちます!!‐プチプチ・アイドルマスター‐ [最新話無料] - ニコニコチャンネル:アニメ
でも、夏のはじまりをあのカレンダーで迎えたい!だったら、Pythonでつくろう!!
つくった!!
横向きポストカードサイズで、祝日とアイドルの誕生日を書きました(クリックでオリジナルサイズ 300dpi)。
どうやって?
Pythonにはカレンダーを生成してくれるモジュールがあるので、こんな関数を作ってあげれば
>>> import calendar
>>> def getCalendar(year, month):
... """ Get calendar
...
... :param int year: year
... :param int month: month
... """
... c = calendar.Calendar(firstweekday=6)
... cal = [['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']]
... cal.extend(c.monthdays2calendar(year, month))
... return cal
年と月の指定で、楽にカレンダーが手に入ります。
>>> getCalendar(2014, 6)
[[u'SUN', u'MON', u'TUE', u'WED', u'THU', u'FRI', u'SAT'],
[(1, 6), (2, 0), (3, 1), (4, 2), (5, 3), (6, 4), (7, 5)],
[(8, 6), (9, 0), (10, 1), (11, 2), (12, 3), (13, 4), (14, 5)],
[(15, 6), (16, 0), (17, 1), (18, 2), (19, 3), (20, 4), (21, 5)],
[(22, 6), (23, 0), (24, 1), (25, 2), (26, 3), (27, 4), (28, 5)],
[(29, 6), (30, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5)]]
夏のはじまりも
>>> getCalendar(2014, 7)
[[u'SUN', u'MON', u'TUE', u'WED', u'THU', u'FRI', u'SAT'],
[(0, 6), (0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5)],
[(6, 6), (7, 0), (8, 1), (9, 2), (10, 3), (11, 4), (12, 5)],
[(13, 6), (14, 0), (15, 1), (16, 2), (17, 3), (18, 4), (19, 5)],
[(20, 6), (21, 0), (22, 1), (23, 2), (24, 3), (25, 4), (26, 5)],
[(27, 6), (28, 0), (29, 1), (30, 2), (31, 3), (0, 4), (0, 5)]]
あとは、絵を描いてPDFとして出力すればいい。使うのは
ReportLab - Content to PDF Solutions
フォントと色を大雑把に調べてみると
- 数字
- Avenir Next Condensed Bold
- 曜日のアルファベット
- Lantinghei TC Heavy か Lantinghei SC Heavy
Week | 文字 | 背景 |
---|---|---|
平日 | #837675 | #FEFEFE |
土曜日 | #66A8C4 | #DBEEF6 |
日曜日 | #E5869F | #FFE2EA |
と分かったので、あとはコードを書けばいい。
コード
ごく一部ですが、やっていることは繰り返し箱を描いて文字を書いただけ。
# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division,
print_function, unicode_literals)
from future_builtins import *
from calendarcard.petit.card import CalPetit
card = CalPetit()
card._setYear(2014)
card._setMonth(6)
card.loopCals()
card.outputPdf()
メソッド loopCals で曜日・休日・誕生日を判断して色を決めている。
# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division,
print_function, unicode_literals)
from future_builtins import *
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm
class CalPetit(object):
def __init__(self, filename='card.pdf'):
# Set length
self.card_width = 148.0*mm
self.card_height = 100.0*mm
self.box_width = 20.5710*mm
self.box_height = 16.6595*mm
self.week_box_height = 3.0269*mm
# Set colors
...
# Set fonts
...
# Create canvas
self.c = canvas.Canvas(filename=filename,
pagesize=(self.card_width, self.card_height))
def loopCals(self):
for idx_cal in xrange(35):
idx_daynum = idx_cal % 7
idx_weeknum = idx_cal // 7
# Set Holiday label
...
# Set Birthday labels
...
# Set Colors
if week == 6 or holiday_label != []:
# SUN or Holiday
...
elif week == 5:
# SAT
...
else:
...
# Day box
self.drawDayBox()
self.drawDayLabel()
# Holiday label
...
# Birthday labels
...
# Week Box
if idx_cal < 7:
self.drawWeekBox()
self.drawWeekLabel()
...
ぷちます!の頃からアイドルマスターにハマって約一年半。ぷちます!!が終わって、次のぷちます!!!はいつかな〜
その前にシンデレラかな?