-
Notifications
You must be signed in to change notification settings - Fork 0
/
palestras.py
110 lines (91 loc) · 2.96 KB
/
palestras.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import csv
import json
import textwrap
from pathlib import Path
from datetime import datetime
from PIL import Image, ImageDraw, ImageFont
CSVPATH = "./aprovadas_all.csv"
JSONPATH = "./aprovadas_all.json"
COLS = [
"Hora",
"Dia",
"Palestra",
"Link",
"Palestrante",
"Descrição",
"Email",
"Minutos",
]
talks = list(csv.DictReader(open(CSVPATH)))
template = Image.open("./template.png")
speaker = ImageFont.truetype("Verdana.ttf", 60)
title = ImageFont.truetype("Verdana.ttf", 25)
description = ImageFont.truetype("Verdana.ttf", 20)
info = ImageFont.truetype("Verdana.ttf", 22)
obs = ImageFont.truetype("Verdana.ttf", 10)
AVATAR_SIZE = (322, 322)
LEFT_BORDER = 40
def get_time_from_json_time(datestr):
obj = datetime.strptime(datestr, "%Y-%m-%dT%H:%M:%S.000")
return f"{obj.day}/{obj.month}/{obj.year} às {obj.hour}:{obj.minute}"
def find_image(email):
for ext in ["jpg", "png", "jpeg", "gif"]:
path = f"{email}.{ext}"
if Path(path).exists():
return path
return False
def write(xy, writer, text, font, size=40, fill="#fff"):
margin, offset = xy
for line in textwrap.wrap(text, width=size):
writer.text((margin, offset), line, font=font, fill=fill)
offset += font.getsize(line)[1]
return offset + 20
for talk in talks:
image = find_image(f"./originais/{talk['Email']}")
if image:
avatar = Image.open(image).resize(AVATAR_SIZE, Image.ANTIALIAS)
bigsize = (avatar.size[0] * 3, avatar.size[1] * 3)
mask = Image.new("L", bigsize, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + bigsize, fill=255)
mask = mask.resize(avatar.size, Image.ANTIALIAS)
avatar.putalpha(mask)
new = template.convert("RGBA")
new.paste(avatar, (628, 96), mask)
writer = ImageDraw.Draw(new)
offset = write((LEFT_BORDER, 95), writer, talk["Palestrante"], speaker)
offset = write((LEFT_BORDER, offset), writer, talk["Palestra"], title)
offset = write(
(LEFT_BORDER, offset),
writer,
talk["Descrição"][:140] + "...",
description,
fill="#000",
)
offset = write(
(LEFT_BORDER, offset),
writer,
f"{talk['Dia']} às {talk['Hora']}",
info,
fill="#000",
)
offset = write((LEFT_BORDER, offset - 20), writer, "BRT(GMT-3)", obs)
new.save(f"./talks/{talk['Email']}.png")
# save json
json.dump(
[
{
"title": talk["Palestra"],
"description": talk["Descrição"],
"speaker": talk["Palestrante"],
"email": talk["Email"],
"datetime": "2019-12-02T16:40:00.000", # TODO: tranform datetime
"duration": talk["Minutos"],
"embed_link": "",
"link": talk["Link"],
}
for talk in talks
],
open(JSONPATH, "w", encoding="utf-8"),
ensure_ascii=False,
)