paul@0 | 1 | #!/usr/bin/env python |
paul@0 | 2 | |
paul@0 | 3 | from array import array |
paul@0 | 4 | import PIL.Image |
paul@0 | 5 | import sys |
paul@0 | 6 | |
paul@0 | 7 | def scale(v): |
paul@0 | 8 | return (v + 64) / 128 |
paul@0 | 9 | |
paul@0 | 10 | def point(rgb): |
paul@0 | 11 | return tuple(map(scale, rgb)) |
paul@0 | 12 | |
paul@0 | 13 | def index(p): |
paul@0 | 14 | return p[0] * 9 + p[1] * 3 + p[2] |
paul@0 | 15 | |
paul@0 | 16 | def colour(i): |
paul@0 | 17 | return (255 * (i % 2), 255 * ((i / 2) % 2), 255 * ((i / 4) % 2)) |
paul@0 | 18 | |
paul@0 | 19 | tones = [ |
paul@0 | 20 | "__", "B_", "BB", # 00x |
paul@0 | 21 | "G_", "C_", "CB", # 01x |
paul@0 | 22 | "GG", "CG", "CC", # 02x |
paul@0 | 23 | "R_", "M_", "MB", # 10x |
paul@0 | 24 | "Y_", "W_", "WB", # 11x |
paul@0 | 25 | "YG", "WG", "WC", # 12x |
paul@0 | 26 | "RR", "MR", "MM", # 20x |
paul@0 | 27 | "YR", "WR", "WM", # 21x |
paul@0 | 28 | "YY", "WY", "WW", # 22x |
paul@0 | 29 | ] |
paul@0 | 30 | |
paul@0 | 31 | colours = ["_", "R", "G", "Y", "B", "M", "C", "W"] |
paul@0 | 32 | |
paul@0 | 33 | if __name__ == "__main__": |
paul@0 | 34 | |
paul@0 | 35 | input_filename, output_filename = sys.argv[1:3] |
paul@0 | 36 | |
paul@0 | 37 | im = PIL.Image.open(input_filename) |
paul@0 | 38 | im = im.resize((320, 256)) |
paul@0 | 39 | |
paul@0 | 40 | for row in range(0, 256): |
paul@0 | 41 | for column in range(0, 320): |
paul@0 | 42 | rgb = im.getpixel((column, row)) |
paul@0 | 43 | p = point(rgb) |
paul@0 | 44 | i = index(p) |
paul@0 | 45 | t = tones[i] |
paul@0 | 46 | c = t[row % 2] |
paul@0 | 47 | i = colours.index(c) |
paul@0 | 48 | im.putpixel((column, row), colour(i)) |
paul@0 | 49 | |
paul@0 | 50 | im.save(output_filename) |
paul@0 | 51 | |
paul@0 | 52 | # vim: tabstop=4 expandtab shiftwidth=4 |