#!/usr/bin/env python3 import struct import zlib from pathlib import Path COLORS = { "purple": (216, 198, 255), "cyan": (165, 243, 252), "rose": (254, 205, 211), } IMAGES = [ ("slider-1.png", 960, 420, "purple"), ("slider-2.png", 960, 420, "rose"), ("slider-3.png", 960, 420, "cyan"), ("side-banner-1.png", 360, 200, "cyan"), ("side-banner-2.png", 360, 200, "rose"), ("category-1.png", 160, 160, "purple"), ("category-2.png", 160, 160, "rose"), ("category-3.png", 160, 160, "cyan"), ("category-4.png", 160, 160, "purple"), ("category-5.png", 160, 160, "cyan"), ("category-6.png", 160, 160, "rose"), ("category-7.png", 160, 160, "purple"), ("category-8.png", 160, 160, "rose"), ("sale-banner.png", 240, 400, "rose"), ("sale-1.png", 280, 340, "purple"), ("sale-2.png", 280, 340, "rose"), ("sale-3.png", 280, 340, "cyan"), ("sale-4.png", 280, 340, "purple"), ("sale-5.png", 280, 340, "cyan"), ("sale-6.png", 280, 340, "rose"), ("sale-7.png", 280, 340, "purple"), ("sale-8.png", 280, 340, "cyan"), ("banner-dual-1.png", 640, 280, "purple"), ("banner-dual-2.png", 640, 280, "cyan"), ("top-1.png", 280, 340, "purple"), ("top-2.png", 280, 340, "cyan"), ("top-3.png", 280, 340, "rose"), ("top-4.png", 280, 340, "purple"), ("top-5.png", 280, 340, "cyan"), ("top-6.png", 280, 340, "rose"), ("top-7.png", 280, 340, "purple"), ("top-8.png", 280, 340, "cyan"), ("banner-triple-1.png", 420, 240, "rose"), ("banner-triple-2.png", 420, 240, "cyan"), ("banner-triple-3.png", 420, 240, "purple"), ("yeganeh-1.png", 280, 340, "purple"), ("yeganeh-2.png", 280, 340, "rose"), ("yeganeh-3.png", 280, 340, "cyan"), ("yeganeh-4.png", 280, 340, "purple"), ("yeganeh-5.png", 280, 340, "rose"), ("yeganeh-6.png", 280, 340, "cyan"), ("about.png", 560, 400, "purple"), ("blog-1.png", 360, 220, "purple"), ("blog-2.png", 360, 220, "cyan"), ("blog-3.png", 360, 220, "rose"), ("blog-4.png", 360, 220, "purple"), ("enamad.png", 80, 80, "purple"), ("samandehi.png", 80, 80, "cyan"), ] def chunk(tag: bytes, data: bytes) -> bytes: return struct.pack(">I", len(data)) + tag + data + struct.pack(">I", zlib.crc32(tag + data) & 0xFFFFFFFF) def write_png(path: Path, width: int, height: int, rgb: tuple[int, int, int]) -> None: row = b"\x00" + bytes(rgb) * width raw = row * height with path.open("wb") as handle: handle.write(b"\x89PNG\r\n\x1a\n") handle.write(chunk(b"IHDR", struct.pack(">IIBBBBB", width, height, 8, 2, 0, 0, 0))) handle.write(chunk(b"IDAT", zlib.compress(raw, 9))) handle.write(chunk(b"IEND", b"")) def main() -> None: out = Path(__file__).resolve().parents[1] / "public" / "images" out.mkdir(parents=True, exist_ok=True) for name, width, height, tone in IMAGES: write_png(out / name, width, height, COLORS[tone]) print(name) if __name__ == "__main__": main()