#!/usr/bin/python -tt # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import optparse import os import subprocess import sys import tempfile chars = '* 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ{}-_' def main(): """Convert a set of text chars into individual BMPs. This uses ImageMagick, so don't run it inside the build chroot. Not all characters in the world are supported. """ parser = optparse.OptionParser() parser.description = ' '.join(main.__doc__.split()) parser.add_option("--foreground", default='#9ccaec', dest="fg", action="store", metavar="COLOR", help="foreground color (%default)") parser.add_option("--background", default='#607c91', dest="bg", action="store", metavar="COLOR", help="background color (%default)") parser.add_option("--font", default='Helvetica', dest="font", action="store", help="font to use (%default)") parser.add_option("--size", default='22', metavar="POINTSIZE", dest="size", action="store", help="font size (%default)") parser.add_option('--dir', default='./outdir', dest="outdir", action="store", help="output directory (%default)") (options, args) = parser.parse_args() if not os.path.isdir(options.outdir): os.mkdir(options.outdir) # ARM U-Boot is very picky about its BMPs. They have to have exactly 256 # colors in their colormap. Imagemagick generally tries to reduce the # colormap when it can, so we have to play some games to force it not to. # We'll create a gradient file with 256 colors, and then make sure that all # our rendered characters use the same colormap. This makes the resulting # images larger, but it also means they'll work on x86 too. Sigh. (handle, gradient_file) = tempfile.mkstemp(".png") os.close(handle) cmd = ('convert', '-size', '256x1', 'gradient:%s-%s' % (options.fg, options.bg), gradient_file) print ' '.join(cmd) subprocess.call(cmd) count=0 for ascii in chars: outfile = os.path.join(options.outdir, "idx%03d_%x.bmp" % (count,ord(ascii))) print outfile cmd = ('convert', '-font', options.font, '-background', options.bg, '-fill', options.fg, '-bordercolor', options.bg, '-border', '0x3', '-gravity', 'Center', '-pointsize', options.size, '-resize', '120%x100', # Yes, magic. '-scale', '59%x78%', # Here, too. 'label:%s' % ascii, '-remap', gradient_file, '-compress', 'none', '-alpha', 'off', outfile) print ' '.join(cmd) count += 1 subprocess.call(cmd) os.unlink(gradient_file) # Start it all off if __name__ == '__main__': main()