"""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)