Draw text on image using Python

Today, I will show you how you can generate image and add text using Python. I was working on a project requires to generate an image for facebook og:image (featured image) and since this project is source code sharing tool adding a source code snippet into the featured image make sense.

I used this library on skypaste.com to generate the featured image like shown below:
text to image for facebook featured image

This project requires Python Imaging Library (PIL). Install it by using the following command

Installing required library

pip install pillow

Source code

#!/usr/bin/env python
from PIL import Image, ImageDraw, ImageFont
import os, sys, getopt

def main(argv):
    output_filename = "output.png" #Default output filename
    code = ""
    try:
        opts, args = getopt.getopt(argv,"i:o:",[])
    except getopt.GetoptError:
        print("Parameter error")
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-i':
            fo = open(arg, "r")
            lines = fo.readlines()
            for line in lines:
                tab_to_space_line = line.replace('\t', '    ') #Replace tab with spaces otherwise it will render without indentions
                code += tab_to_space_line
            fo.close() #Of course we need to close
            os.remove(arg) #Delete the file.
        elif opt == '-o':
            output_filename = arg #Use the user supplied output filename if given
    im = Image.new('RGBA', (1200, 600), (48, 10, 36, 255)) #Create a rectangular image with background color
    draw = ImageDraw.Draw(im) #Draw the image
    try:
        fontsFolder = '/usr/share/fonts/truetype'
        monoFont = ImageFont.truetype(os.path.join(fontsFolder, 'UbuntuMono-R.ttf'), 18)
        draw.text((10, 10), code, fill='white', font=monoFont) #Draw the text on image with true fonts
    except Exception as ex:
        draw.text((10, 10), code, fill='white') #Draw the text on image with default system fonts
    im.save(output_filename) #Save the image

if __name__ == "__main__":
    main(sys.argv[1:])

Source code is also available on github at https://github.com/johnpili/python-text2image

Usage

text2image -i source.cpp -o output.png

Conclusion

Learning and using Python is fun and easy. No wonder why it is one of the recommended programming language by senior developers. I will use both Python and Golang on my production projects now and in the future. Python comes with a lot of libraries that makes software development simple. I recommend that you read Automate the Boring Stuff with Python, 2nd Edition: Practical Programming for Total Beginners, this book will show you a lot examples that will increase your productivity.