#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2024/02/24 20:19:29 +0900> """ png image to FreeBASHIC header file Usage: python png2bitsbas.py -i input.png --label label_name > image.bi Windows10 x64 22H2 + Python 3.10.10 64bit + Pillow 10.1.0 """ import argparse import os import sys from PIL import Image def main(): parser = argparse.ArgumentParser() parser.add_argument("-i", "--infile", required=True, help="PNG image file") parser.add_argument("--label", help="symbol name") args = parser.parse_args() infile = args.infile if not os.path.isfile(infile): print("Error: Not found %s" % infile) sys.exit() if not args.label: label = infile.replace(".", "_") label = label.replace(" ", "_") else: label = args.label im = Image.open(infile).convert("L") im.point(lambda x: 0 if x < 128 else x) w, h = im.size outbuf = [] count = 0 for y in range(h - 1, -1, -1): buf = [] for i in range(int(w / 8)): buf.append(0) if (w % 8) != 0: buf.append(0) for x in range(w): v = im.getpixel((x, y)) if v > 128: buf[int(x / 8)] |= 1 << (7 - (x % 8)) s = "" for v in buf: s += "&H%s, " % format(v, "02x") count += 1 if y <= 0: s = s.rstrip(" ,") s += " " outbuf.append(" %s _" % (s)) outbuf.append("}\n") print("' infile: %s\n" % infile) print("#ifndef __%s__" % label.upper()) print("#define __%s__\n" % label.upper()) print("Const %s_WIDTH = %d" % (label.upper(), w)) print("Const %s_HEIGHT = %d" % (label.upper(), h)) print("Const %s_LEN = %d\n" % (label.upper(), count)) print("Dim as ubyte %s(%d - 1) => { _" % (label, count)) for s in outbuf: print(s) print("#endif") if __name__ == "__main__": main()