#!/usr/bin/env python3 from PIL import Image import sys import struct import zlib def process_rgb(w, h, data): pix = bytearray(w * h * 3) for i in range(w * h): c = (data[i * 2] << 8) + data[i * 2 + 1] pix[i * 3 + 0] = (c & 0xF800) >> 8 pix[i * 3 + 1] = (c & 0x07C0) >> 3 pix[i * 3 + 2] = (c & 0x001F) << 3 return bytes(pix) def process_grayscale(w, h, data): pix = bytearray(w * h) for i in range(w * h // 2): pix[i * 2 + 0] = data[i] & 0xF0 pix[i * 2 + 1] = (data[i] & 0x0F) << 4 return bytes(pix) def process_image(ifn, ofn): data = open(ifn, "rb").read() if ifn.endswith(".toif"): if data[:4] != b"TOIf": print("Unknown TOIF header") return 1 elif ifn.endswith(".toig"): if data[:4] != b"TOIg": print("Unknown TOIG header") return 2 else: print("Unsupported format") return 3 if ofn is None: ofn = "%s.png" % ifn[:-5] w, h = struct.unpack(" 2 else None process_image(ifn, ofn) main()