46 lines
2.2 KiB
Python
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)
|