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")
@Amirelect
Copy link

Very Cooool
Tanks

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