funny, after 5 years, and with a lot of help fron @Nasser Al-Wohaibi, I figured out how to do this:
You need to access the text back using the BIDI algorithm.
# -*- coding: utf-8 -*- from bidi.algorithm import get_display import PIL.Image, PIL.ImageFont, PIL.ImageDraw img= PIL.Image.new("L", (400, 200)) draw = PIL.ImageDraw.Draw(img) font = PIL.ImageFont.truetype( r"c:\windows\fonts\arial.ttf", 30) t1 = u'סֶפֶר ספר!' draw.text( (10,10), 'before BiDi :' + t1, fill=255, font=font) t2 = get_display(t1)
@ The answer to Nasser has additional value, which probably applies only to Arabic texts (letters in the Arabic form of change and connectivity based on their neiboring letters, in Hebrew all letters are separate), so only the bidi part was relevant for this question.
in the selection results, the 2nd row is the correct shape and the correct positioning of the vocalization marks.

Thanks to @tzot for help + code snippets
a-rgorosis:
Samples of the different behavior of the Hebrew font "nowhere." Not all fonts behave the same: 
Berry tsakala
source share