#!/usr/bin/python from PIL import Image import sys import os import struct from getopt import gnu_getopt """Convert image to raw binary using Python Imaging Library.""" def split_seq(seq, splitsize): newseq = [] while seq: newseq.append(seq[:splitsize]) seq = seq[splitsize:] return newseq def write_block(f, image, width=8, height=8, offset_x=0, offset_y=0): for y in range(height): for x in range(width): val = image.getpixel((x+offset_x, y+offset_y)) f.write(chr(val)) if __name__=="__main__": tiled, args = gnu_getopt(sys.argv[1:], "t") if len(args) < 2: print "Usage: %s [-t] [palette]" % os.path.split(sys.argv[0])[1] print " -t - Convert data in 8x8 pixel tiles in 1D layout." sys.exit() im = Image.open(args[0]) output = open(args[1], "wb") width, height = im.size print "Converting %dx%d image to binary." % (width, height) if not tiled: write_block(output, im, width, height) else: print "Doing 1D tile conversion." if (width % 8) or (height % 8): print "Can't tile image where width or height is not multiple of 8." exit(-1) else: for offset_y in map(lambda n : 8*n, range(height / 8)): for offset_x in map(lambda n : 8*n, range(width / 8)): write_block(output, im, offset_x=offset_x, offset_y=offset_y) if len(args) > 2: pal_output = open(args[2], "wb") print "Converting %d color palette." % (len(im.palette.palette) / 3) for color in split_seq(im.palette.palette, 3): r, g, b = map(lambda col : col >> 3, map(ord, color)) value = (b << 10) + (g << 5) + r pal_output.write(struct.pack("