yokutango/processing/generate_image.py

87 lines
2.1 KiB
Python
Raw Permalink Normal View History

2022-02-01 16:15:08 +01:00
#!/usr/bin/env python3
from os import scandir
from json import load
from math import floor
from PIL import Image, ImageDraw, ImageFont
width = 3000
fontsize = 60
padding = 40
spacing = 4
runspacing = 4
background_color = '#00000000'
found_color = '#A6E22E'
not_found_color = '#606060'
found_several_color = '#FF0000'
not_in_jouyou_color = '#FFFF00'
jouyou = [];
kanji = {};
for file in scandir('../kanji'):
with open(file.path, "r") as f:
for k in load(f):
v = kanji.setdefault(k['kanji'], 0)
kanji[k['kanji']] = v + 1
with open('jouyou_kanji.json', "r") as f:
for key,value in load(f).items():
for k in value.split():
jouyou.append(k)
for k in kanji.keys():
if not k in jouyou:
kanji[k] = -1
jouyou.append(k)
amountOfColumns = floor(width / fontsize)
amountOfRows = floor(len(jouyou) / amountOfColumns)
size = (
width + (padding * 2) + (amountOfColumns * runspacing),
(fontsize * amountOfRows) + (padding * 2) + (amountOfRows * spacing)
)
img = Image.new('RGBA', size, color = background_color)
fnt = ImageFont.truetype("/home/h7x4/.local/share/fonts/Sans/Droid/Droid/Droid Sans Japanese/DroidSansJapanese.ttf", fontsize)
d = ImageDraw.Draw(img)
dynamic_runspacing = (width % fontsize) / amountOfColumns
dynamic_spacing = ((len(jouyou) / amountOfColumns) % fontsize) / amountOfRows
spaceBetweenRows = (fontsize + runspacing + dynamic_runspacing)
spaceBetweenColumns = (fontsize + spacing + dynamic_spacing)
for y in range(amountOfRows):
finished = False
for x in range(amountOfColumns):
k = jouyou[y * amountOfColumns + x]
found = kanji.setdefault(k, 0)
if found == -1:
color = not_in_jouyou_color
elif found == 0:
color = not_found_color
elif found == 1:
color = found_color
else:
color = found_several_color
text_location = (
padding + x * spaceBetweenRows,
padding - fontsize/2 + y * spaceBetweenColumns
)
d.text(text_location, k, fill= color, font=fnt)
if (x * y == len(jouyou) - 1):
finished = True
if finished:
break
# print(jouyou)
# print(kanji)
img.save('kanji.png')