pythonpython-imaging-librarylang

how can I type persian text in pillow library


How can I write Persian text on photos with the help of Pillow Library in Python? When I try to write text, the letters of the word are written from the end to the beginning.

For example, when I want to write "Hello World" in Persian, it becomes "dolW olleH" on the photo.

pillow persian writing problem:
enter image description here

from PIL import  Image, ImageDraw, ImageFont

a = Image.open('1.jpg')
draw = ImageDraw.Draw(a)
font = ImageFont.truetype('Dana.ttf', size=200)
draw.text((100, 200), 'سلام دنیا', font=font, fill=(255, 255, 255))

Solution

  • See this. It'll help you to write in Arabic/Persian in Pillow.

    # Tested on Python 3.6.1
    
    # install: pip install --upgrade arabic-reshaper
    import arabic_reshaper
    
    # install: pip install python-bidi
    from bidi.algorithm import get_display
    
    # install: pip install Pillow
    from PIL import ImageFont
    from PIL import Image
    from PIL import ImageDraw
    
    # use a good font!
    fontFile = "/Users/amirreza/pil/Sahel.ttf"
    
    # this was a 400x400 jpg file
    imageFile = "/Users/amirreza/pil/input.jpg"
    
    # load the font and image
    font = ImageFont.truetype(fontFile, 18)
    image = Image.open(imageFile)
    
    # first you must prepare your text (you dont need this step for english text)
    text = "سلام ایران"
    reshaped_text = arabic_reshaper.reshape(text)    # correct its shape
    bidi_text = get_display(reshaped_text)           # correct its direction
    
    # start drawing on image
    draw = ImageDraw.Draw(image)
    draw.text((0, 0), bidi_text, (255,255,255), font=font)
    draw = ImageDraw.Draw(image)
    
    # save it
    image.save("output.png")