Files
matrix-screen-controller/核桃派软件源代码/scripts/compare_bus_fonts.py
T

46 lines
2.2 KiB
Python

"""Compare actual layer output, including old 16px enlarged and new 32px."""
from pathlib import Path
import argparse
import sys
from PIL import Image, ImageDraw
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))
from app.fonts.store import FontCatalog
from app.display.text_renderer import TextOptions, render_text_layer
from bus_font_design import CLASSES
def compare(output: Path, old: Path):
output.mkdir(parents=True, exist_ok=True)
catalog = FontCatalog(output / "data")
columns = [(str(old),16,"OLD 16"), ("builtin:walnut-bus-8x16",16,"NEW 16"),
(str(old),32,"OLD 16 x2"), ("builtin:walnut-bus-16x32",32,"NEW 32")]
samples = ["高铁北站", "花鸟市场", "开往火车", "鹤警藏赢", "口日目田", "由甲申回", "国园圈围", "站铁路湖", "重量喜音", "人入大文", "0O1I", "l5S8", "B2Z6"]
sheet = Image.new("RGB", (1056, len(samples) * 148), "#111111")
draw = ImageDraw.Draw(sheet)
for y, text in enumerate(samples):
for x, (font, size, label) in enumerate(columns):
layer = render_text_layer(TextOptions(text, font=font, size=size), size=(64, 32), font_resolver=catalog.resolve)
scaled = layer.resize((256,128), Image.Resampling.NEAREST)
draw.text((x*264+2,y*148+2),label,fill="white")
sheet.paste(scaled,(x*264,y*148+18),scaled.getchannel('A'))
sheet.save(output / "four-way.png")
for kind, characters in CLASSES.items():
proof = Image.new("RGB", (len(characters)*48,96), "#111111")
labels = ImageDraw.Draw(proof)
for index, char in enumerate(characters):
layer = render_text_layer(TextOptions(char,font="builtin:walnut-bus-16x32",size=32),size=(16,32),font_resolver=catalog.resolve)
big=layer.resize((32,64),Image.Resampling.NEAREST)
labels.text((index*48,2),f"{ord(char):04X}",fill="white")
proof.paste(big,(index*48+4,20),big.getchannel('A'))
proof.save(output / f"class-{kind}.png")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--output", type=Path, required=True)
parser.add_argument("--old", type=Path, required=True)
args = parser.parse_args()
compare(args.output,args.old)