Skip to content

Instantly share code, notes, and snippets.

@amrza
Last active September 13, 2024 01:30
Show Gist options
  • Save amrza/04658c71ac02d82580855f89b9b3dff4 to your computer and use it in GitHub Desktop.
Save amrza/04658c71ac02d82580855f89b9b3dff4 to your computer and use it in GitHub Desktop.
How to write RTL(Arabic/Persian) text on images in python.
# 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")
@JoeTheFullstack
Copy link

although still we don't have many ttf options... any way to let us use farsi specified fonts like B-zar or B-Nazanin?

@aliaminibagh
Copy link

hi.
I get this error? have any idea ?
TypeError: '>' not supported between instances of 'str' and 'int'

you can see this too :
issue

@keivanipchihagh
Copy link

Works like a charm! Thank you.

@hamzazahidulislam
Copy link

Thank you so much Brother.

@Amirelect
Copy link

Very Cooool
Tanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment