Skip to content

Instantly share code, notes, and snippets.

@ljcooke
Created June 19, 2017 08:18
Show Gist options
  • Save ljcooke/abbe34e6106f321709babeef474750d6 to your computer and use it in GitHub Desktop.
Save ljcooke/abbe34e6106f321709babeef474750d6 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
"""
Make an image with some text. Example:
./textimg.py -f fonts/SourceCodePro-Regular.otf 'Hello, world.'
"""
import argparse
import subprocess
import sys
DEFAULT_FILENAME = 'image.png'
DEFAULT_WIDTH = 900
DEFAULT_HEIGHT = 0
DEFAULT_FONT = 'Arial'
DEFAULT_FONTSIZE = 72
DEFAULT_FGCOLOR = '#4C4C4C'
DEFAULT_BGCOLOR = 'white'
def write_image(text, filename, attrs):
"""
Generate an image with text in the center.
"""
width = getattr(attrs, 'width', DEFAULT_WIDTH)
height = getattr(attrs, 'height', DEFAULT_HEIGHT)
font = getattr(attrs, 'font', DEFAULT_FONT)
fontsize = getattr(attrs, 'font_size', DEFAULT_FONTSIZE)
fgcolor = getattr(attrs, 'fg_color', DEFAULT_FGCOLOR)
bgcolor = getattr(attrs, 'bg_color', DEFAULT_BGCOLOR)
size = '{}x{}'.format(width, height or width)
process = subprocess.run([
'convert',
'-background', bgcolor,
'-fill', fgcolor,
'-size', size,
'-font', font,
'-pointsize', str(fontsize),
'-gravity', 'center',
'label:' + text,
filename,
])
process.check_returncode()
def main():
"""
Main entry point.
"""
parser = argparse.ArgumentParser()
parser.add_argument('text', metavar='TEXT')
parser.add_argument('-o', '--output', metavar='FILENAME',
dest='filename', default=DEFAULT_FILENAME)
parser.add_argument('-w', '--width', metavar='PIXELS',
type=int, default=DEFAULT_WIDTH)
parser.add_argument('-H', '--height', metavar='PIXELS',
type=int, default=DEFAULT_HEIGHT)
parser.add_argument('-f', '--font', metavar='FONT',
default=DEFAULT_FONT)
parser.add_argument('-s', '--font-size', metavar='POINTS',
default=DEFAULT_FONTSIZE)
parser.add_argument('-c', '--fg-color', metavar='COLOR',
default=DEFAULT_FGCOLOR)
parser.add_argument('-b', '--bg-color', metavar='COLOR',
default=DEFAULT_BGCOLOR)
if not sys.argv[1:]:
parser.print_help()
return
args = parser.parse_args()
try:
write_image(args.text, args.filename, args)
except subprocess.CalledProcessError as err:
parser.error(err)
if __name__ == '__main__':
sys.exit(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment