Files
forge-invar/host_generate.py
T
2026-10-30 00:04:35 +01:00

107 lines
2.9 KiB
Python

from PIL import Image, ImageDraw, ImageFont, ImageMath
# TODO clean
font = ImageFont.truetype("./TinyAndChunkyRegular.ttf", 5)
font2 = ImageFont.truetype("./Px437_IBM_BIOS.ttf", 8)
im0 = Image.new("1", (128, 64), "black")
draw = ImageDraw.Draw(im0)
draw.text((26, 24), "F.O.R.G.E.", fill="white", font=font2)
draw.rectangle((24, 35, 104, 40), outline="white", fill="black")
im0.save("i2c_loading.png")
im = Image.new("1", (128, 64), "black")
draw = ImageDraw.Draw(im)
# tempo
draw.text((7, -2), "TEMPO:", fill="white", font=font)
draw.rectangle((6, 6, 60, 11), outline="white", fill="black")
# time
draw.text((68, -2), "TIME:", fill="white", font=font)
draw.rectangle((67, 6, 121, 11), outline="white", fill="black")
# pipes
draw.rectangle((26, 22, 78, 24), fill="white")
draw.rectangle((26, 46, 78, 48), fill="white")
draw.rectangle((78, 34, 128, 36), fill="white")
draw.rectangle((76, 23, 78, 46), fill="white")
# squares
draw.rectangle((12, 16, 26, 30), outline="white", fill="black")
draw.rectangle((41, 16, 55, 30), outline="white", fill="black")
draw.rectangle((12, 40, 26, 54), outline="white", fill="black")
draw.rectangle((41, 40, 55, 54), outline="white", fill="black")
draw.rectangle((70, 28, 84, 42), outline="white", fill="black")
draw.rectangle((99, 28, 113, 42), outline="white", fill="black")
selected_bounds = [
(10, 14, 28, 32),
(10, 38, 28, 56),
(39, 14, 57, 32),
(39, 38, 57, 56),
(0, 0, 0, 0),
(97, 26, 115, 44),
]
# page
draw.circle((55, 61), 2, outline="white", fill="black")
draw.circle((63, 61), 2, outline="white", fill="black")
draw.circle((71, 61), 2, outline="white", fill="black")
im.save("i2c_background.png")
# ---
# tempo
draw.text((42, -2), "240", fill="white", font=font)
draw.rectangle((6, 7, 6 + 53 * 1, 10), fill="white", width=0)
# time
draw.text((94, -2), "1234", fill="white", font=font)
draw.rectangle((67, 7, 67 + 53 * 1, 10), fill="white", width=0)
draw.circle((55, 61), 2, fill="white")
# selected
for i in range(len(selected_bounds)):
if selected_bounds[i][0] > 0:
draw.rectangle(selected_bounds[i], outline="white", fill=None)
im_overlay = Image.new("1", (128, 64), "black")
draw2 = ImageDraw.Draw(im_overlay)
# shaders
draw2.text((16, 20), "0", fill="white", font=font2)
draw2.text((45, 20), "2", fill="white", font=font2)
draw2.text((16, 44), "1", fill="white", font=font2)
draw2.text((45, 44), "3", fill="white", font=font2)
draw2.text((74, 32), "K", fill="white", font=font2)
draw2.text((103, 32), "6", fill="white", font=font2)
im = ImageMath.lambda_eval(lambda args: args["convert"](args["a"] ^ args["b"], "1"), a=im, b=im_overlay)
# ---
im = im.resize((1280, 640)).convert("RGB")
draw2 = ImageDraw.Draw(im)
for x in range(1, 128):
draw2.line((x * 10, 0, x * 10, 640), fill=(50, 50, 50))
for y in range(1, 64):
draw2.line((0, y * 10, 1280, y * 10), fill=(50, 50, 50))
im.resize((1280, 640)).save("tmp.png")