Compare commits
No commits in common. "62778e267991531e8afd021a30b0710c9881a59b" and "4b700f66528a1de854f181178f9b582598fe5567" have entirely different histories.
62778e2679
...
4b700f6652
2
.gitignore
vendored
2
.gitignore
vendored
@ -5,7 +5,5 @@ site/atom_blog.xml
|
|||||||
site/atom_events.xml
|
site/atom_events.xml
|
||||||
poster.html
|
poster.html
|
||||||
poster.pdf
|
poster.pdf
|
||||||
poster_light.png
|
|
||||||
poster_dark.png
|
|
||||||
http.access.log
|
http.access.log
|
||||||
http.error.log
|
http.error.log
|
||||||
|
@ -1,89 +0,0 @@
|
|||||||
#! /usr/bin/env python
|
|
||||||
|
|
||||||
import freetype
|
|
||||||
import io
|
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
|
||||||
import csv
|
|
||||||
import datetime as dt
|
|
||||||
from dateutil import relativedelta
|
|
||||||
|
|
||||||
CURRENT_TIME = dt.date.today()
|
|
||||||
NEXT_MONTH = CURRENT_TIME
|
|
||||||
DAYS_OF_WEEK_SR = ("PON", "UTO", "SRE", "ČET", "PET", "SUB", "NED")
|
|
||||||
MONTHS_SR = ("Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust",\
|
|
||||||
"Septembar", "Oktobar", "Novembar", "Decembar")
|
|
||||||
|
|
||||||
|
|
||||||
def load_events(csv_path:str) -> list[dict]:
|
|
||||||
events = []
|
|
||||||
with open(csv_path) as csv_file:
|
|
||||||
csv_reader = csv.reader(csv_file)
|
|
||||||
next(csv_reader, None)
|
|
||||||
for event in csv_reader:
|
|
||||||
event_date = event[0]
|
|
||||||
event_date_parsed = dt.datetime.strptime(event_date, "%d-%m-%Y").date()
|
|
||||||
event_time = event[1]
|
|
||||||
event_title = event[3]
|
|
||||||
current_event = {"date":event_date_parsed,
|
|
||||||
"time":event_time,
|
|
||||||
"title":event_title.strip()}
|
|
||||||
if event_date_parsed >= NEXT_MONTH:
|
|
||||||
events.append(current_event)
|
|
||||||
return events
|
|
||||||
|
|
||||||
def drawPoster(events, bg, fg):
|
|
||||||
fontFacade = ImageFont.truetype('./site/font/Facade-Sud.woff', size=110)
|
|
||||||
fontIosevka = ImageFont.truetype('./site/font/iosevka-regular.woff', size=60)
|
|
||||||
fontIosevkaSmall = ImageFont.truetype('./site/font/iosevka-regular.woff', size=45)
|
|
||||||
|
|
||||||
W = 1200
|
|
||||||
H = 1500
|
|
||||||
img = Image.new('RGB', (W, H), bg)
|
|
||||||
draw = ImageDraw.Draw(img)
|
|
||||||
|
|
||||||
header = "DECENTRALA"
|
|
||||||
_, _, w, _ = draw.textbbox((0, 0), header, font=fontFacade)
|
|
||||||
draw.text(((W-w)/2, 120), header, font=fontFacade, fill=fg)
|
|
||||||
|
|
||||||
subheader = f"Plan za {MONTHS_SR[NEXT_MONTH.month - 1]}"
|
|
||||||
_, _, w, _ = draw.textbbox((0, 0), subheader, font=fontIosevka)
|
|
||||||
draw.text(((W-w)/2, 240), subheader, font=fontIosevka, fill=fg)
|
|
||||||
|
|
||||||
height = 410
|
|
||||||
|
|
||||||
for event in events:
|
|
||||||
date = DAYS_OF_WEEK_SR[event["date"].weekday()]
|
|
||||||
day = event["date"].day
|
|
||||||
title = event["title"]
|
|
||||||
pad = " " if event["date"].day < 10 else ""
|
|
||||||
eventText = f"{date} {day}. {pad} {title}"
|
|
||||||
draw.text((120, height), eventText, font=fontIosevkaSmall, fill=fg)
|
|
||||||
height += 70
|
|
||||||
|
|
||||||
def drawCircle(x, y):
|
|
||||||
r = 10
|
|
||||||
draw.ellipse((x - r, y - r, x + r, y+r), fill=fg, outline=(0, 0, 0), width=0)
|
|
||||||
|
|
||||||
LCX = 950 # logo center x
|
|
||||||
LCY = 1200 # logo center y
|
|
||||||
d = 50 # delta
|
|
||||||
drawCircle(LCX - d, LCY)
|
|
||||||
drawCircle(LCX, LCY)
|
|
||||||
drawCircle(LCX, LCY - d)
|
|
||||||
drawCircle(LCX, LCY + d)
|
|
||||||
drawCircle(LCX + d, LCY)
|
|
||||||
|
|
||||||
draw.line([(LCX - d, LCY), (LCX + d, LCY)], fill=fg, width=5, joint=None)
|
|
||||||
draw.line([(LCX, LCY), (LCX, LCY + d), (LCX + d, LCY), (LCX, LCY - d)], fill=fg, width=5, joint=None)
|
|
||||||
draw.text((LCX - 1.7*d, LCY + 1.5*d), "dmz.rs", font=fontIosevka, fill=fg)
|
|
||||||
|
|
||||||
return img
|
|
||||||
|
|
||||||
|
|
||||||
events = load_events("dogadjaji.csv")
|
|
||||||
|
|
||||||
img = drawPoster(events, (0, 0, 0), (20, 250, 50))
|
|
||||||
img.save('poster_dark.png')
|
|
||||||
|
|
||||||
img = drawPoster(events, (255, 255, 255), (0, 0, 0))
|
|
||||||
img.save('poster_light.png')
|
|
Loading…
Reference in New Issue
Block a user