#!/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')