32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
"""render_text.py — pre-render specific Chinese strings to C arrays"""
|
|||
|
|
from PIL import Image, ImageFont, ImageDraw
|
||
|
|
|
||
|
|
def render(ttf, texts, size, var_prefix):
|
||
|
|
font = ImageFont.truetype(ttf, size)
|
||
|
|
for name, text in texts:
|
||
|
|
w = font.getbbox(text)[2]
|
||
|
|
h = size + 4
|
||
|
|
img = Image.new("L", (w, h), 0)
|
||
|
|
draw = ImageDraw.Draw(img)
|
||
|
|
draw.text((0, 2), text, font=font, fill=255)
|
||
|
|
|
||
|
|
pixels = list(img.tobytes())
|
||
|
|
print(f"/* {text} — {w}x{h} */")
|
||
|
|
print(f"static const int {var_prefix}_{name}_w = {w};")
|
||
|
|
print(f"static const int {var_prefix}_{name}_h = {h};")
|
||
|
|
print(f"static const unsigned char {var_prefix}_{name}_data[{w}*{h}] = {{")
|
||
|
|
for y in range(h):
|
||
|
|
row = ", ".join(str(pixels[y*w + x]) for x in range(w))
|
||
|
|
print(f" {row},")
|
||
|
|
print("};")
|
||
|
|
print()
|
||
|
|
|
||
|
|
texts = [
|
||
|
|
("welcome", "欢迎使用 Deshab"),
|
||
|
|
("setup", "接下来让我们来引导你设置你的系统"),
|
||
|
|
]
|
||
|
|
# Generate for multiple sizes
|
||
|
|
for sz in [24]:
|
||
|
|
print(f"// ===== size={sz}px =====")
|
||
|
|
render("SYSTEM/system/font/simhei.ttf", texts, sz, f"txt{sz}")
|