Search code examples
pythonpython-imaging-libraryimaging

How do I draw text at an angle using python's PIL?


Using Python I want to be able to draw text at different angles using PIL.

For example, imagine you were drawing the number around the face of a clock. The number 3 would appear as expected whereas 12 would we drawn rotated counter-clockwise 90 degrees.

Therefore, I need to be able to draw many different strings at many different angles.


Solution

  • Draw text into a temporary blank image, rotate that, then paste that onto the original image. You could wrap up the steps in a function. Good luck figuring out the exact coordinates to use - my cold-fogged brain isn't up to it right now.

    This demo writes yellow text on a slant over an image:

    # Demo to add rotated text to an image using PIL
    
    import Image
    import ImageFont, ImageDraw, ImageOps
    
    im=Image.open("stormy100.jpg")
    
    f = ImageFont.load_default()
    txt=Image.new('L', (500,50))
    d = ImageDraw.Draw(txt)
    d.text( (0, 0), "Someplace Near Boulder",  font=f, fill=255)
    w=txt.rotate(17.5,  expand=1)
    
    im.paste( ImageOps.colorize(w, (0,0,0), (255,255,84)), (242,60),  w)