#!/usr/bin/env python # $URL: http://pypng.googlecode.com/svn/trunk/code/texttopng $ # $Rev: 132 $ # Script to renders text as a PNG image. from array import array import itertools font = { 32: '0000000000000000', 33: '0010101010001000', 34: '0028280000000000', 35: '0000287c287c2800', 36: '00103c5038147810', 37: '0000644810244c00', 38: '0020502054483400', 39: '0010100000000000', 40: '0008101010101008', 41: '0020101010101020', 42: '0010543838541000', 43: '000010107c101000', 44: '0000000000301020', 45: '000000007c000000', 46: '0000000000303000', 47: '0000040810204000', 48: '0038445454443800', 49: '0008180808080800', 50: '0038043840407c00', 51: '003c041804043800', 52: '00081828487c0800', 53: '0078407804047800', 54: '0038407844443800', 55: '007c040810101000', 56: '0038443844443800', 57: '0038443c04040400', 58: '0000303000303000', 59: '0000303000301020', 60: '0004081020100804', 61: '0000007c007c0000', 62: '0040201008102040', 63: '0038440810001000', 64: '00384c545c403800', 65: '0038447c44444400', 66: '0078447844447800', 67: '0038444040443800', 68: '0070484444487000', 69: '007c407840407c00', 70: '007c407840404000', 71: '003844405c443c00', 72: '0044447c44444400', 73: '0038101010103800', 74: '003c040404443800', 75: '0044487048444400', 76: '0040404040407c00', 77: '006c545444444400', 78: '004464544c444400', 79: '0038444444443800', 80: '0078447840404000', 81: '0038444444443c02', 82: '0078447844444400', 83: '0038403804047800', 84: '007c101010101000', 85: '0044444444443c00', 86: '0044444444281000', 87: '0044445454543800', 88: '0042241818244200', 89: '0044443810101000', 90: '007c081020407c00', 91: '0038202020202038', 92: '0000402010080400', 93: '0038080808080838', 94: '0010284400000000', 95: '000000000000fe00', 96: '0040200000000000', 97: '000038043c443c00', 98: '0040784444447800', 99: '0000384040403800', 100: '00043c4444443c00', 101: '000038447c403c00', 102: '0018203820202000', 103: '00003c44443c0438', 104: '0040784444444400', 105: '0010003010101000', 106: '0010003010101020', 107: '0040404870484400', 108: '0030101010101000', 109: '0000385454444400', 110: '0000784444444400', 111: '0000384444443800', 112: '0000784444784040', 113: '00003c44443c0406', 114: '00001c2020202000', 115: '00003c4038047800', 116: '0020203820201800', 117: '0000444444443c00', 118: '0000444444281000', 119: '0000444454543800', 120: '0000442810284400', 121: '00004444443c0438', 122: '00007c0810207c00', 123: '0018202060202018', 124: '0010101000101010', 125: '003008080c080830', 126: '0020540800000000', } def char(i): """Get image data for the character `i` (a one character string). Returned as a list of rows. Each row is a tuple containing the packed pixels. """ i = ord(i) if i not in font: return [(0,)]*8 return map(lambda row: (ord(row),), font[i].decode('hex')) def texttoraster(m): """Convert string *m* to a raster image (by rendering it using the font in *font*). A triple of (*width*, *height*, *pixels*) is returned; *pixels* is in boxed row packed pixel format. """ # Assumes monospaced font. x = 8*len(m) y = 8 return x,y,itertools.imap(lambda row: itertools.chain(*row), zip(*map(char, m))) def render(message, out): import png x,y,pixels = texttoraster(message) w = png.Writer(x, y, greyscale=True, bitdepth=1) w.write_packed(out, pixels) out.flush() def main(argv=None): import sys if argv is None: argv = sys.argv if len(argv) > 1: message = argv[1] else: message = sys.stdin.read() render(message, sys.stdout) if __name__ == '__main__': main()