blob: 1c626d567acd45c7544a7baae8d509c83bf85eb8 [file] [log] [blame]
#!/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()