#!/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()