#!/usr/bin/env python3 from __future__ import annotations import struct import sys from pathlib import Path def main() -> int: if len(sys.argv) != 3: raise SystemExit("usage: png-to-icns ICONSET_DIR OUTPUT.icns") iconset = Path(sys.argv[1]) output = Path(sys.argv[2]) resources = [ (b"icp4", "icon_16x16.png"), (b"icp5", "icon_32x32.png"), (b"icp6", "icon_32x32@2x.png"), (b"ic07", "icon_128x128.png"), (b"ic08", "icon_256x256.png"), (b"ic09", "icon_512x512.png"), (b"ic10", "icon_512x512@2x.png"), ] blocks: list[bytes] = [] for resource_type, filename in resources: payload = (iconset / filename).read_bytes() blocks.append(resource_type + struct.pack(">I", len(payload) + 8) + payload) body = b"".join(blocks) output.write_bytes(b"icns" + struct.pack(">I", len(body) + 8) + body) return 0 if __name__ == "__main__": raise SystemExit(main())