Files
battery-tracker-app/sbin/gen_icons.py
T
2026-06-28 07:44:04 -05:00

34 lines
1.1 KiB
Python

"""Generate solid-color PNG icons for PWA manifest using stdlib only (no Pillow)."""
import zlib
import struct
import os
def make_png(size, rgb=(0x25, 0x63, 0xEB)):
"""Create a minimal valid RGB PNG of the given size filled with one color."""
w = h = size
raw = b''
for _ in range(h):
raw += b'\x00' + bytes(rgb) * w # filter byte 0 (None) + RGB pixels
compressed = zlib.compress(raw, 9)
def chunk(name, data):
c = name + data
return struct.pack('>I', len(data)) + c + struct.pack('>I', zlib.crc32(c) & 0xffffffff)
sig = b'\x89PNG\r\n\x1a\n'
ihdr = chunk(b'IHDR', struct.pack('>IIBBBBB', w, h, 8, 2, 0, 0, 0))
idat = chunk(b'IDAT', compressed)
iend = chunk(b'IEND', b'')
return sig + ihdr + idat + iend
if __name__ == '__main__':
out_dir = os.path.join(os.path.dirname(__file__), '..', 'static')
os.makedirs(out_dir, exist_ok=True)
for size in [192, 512]:
path = os.path.join(out_dir, f'icon-{size}.png')
with open(path, 'wb') as f:
f.write(make_png(size))
print(f'Wrote {path}')