有趣的是,经过5年,在@Nasser Al-Wohaibi的大力帮助下,我意识到了如何做到这一点:
需要使用BIDI算法反转文本。
# -*- coding: utf-8 -*-from bidi.algorithm import get_displayimport PIL.Image, PIL.ImageFont, PIL.ImageDrawimg= PIL.Image.new("L", (400, 200))draw = PIL.ImageDraw.Draw(img)font = PIL.ImageFont.truetype( r"c:windowsfontsarial.ttf", 30)t1 = u'סֶפֶר ספר!'draw.text( (10,10), 'before BiDi :' + t1, fill=255, font=font)t2 = get_display(t1) # <--- here's the magic <---draw.text( (10,50), 'after BiDi: ' + t2, fill=220, font=font)img.save( 'bidi-test.png')@Nasser的答案具有附加价值,该价值可能仅与阿拉伯语文本有关(阿拉伯字母根据其近义字母变化形状和相联性的字母,希伯来语中的所有字母均分开),因此仅比迪烟语部分与该问题有关。
在采样结果中,第二行是正确的形式,并且发声标记的位置正确。
谢谢@tzot的帮助+代码段
提案:
希伯来语“ nikud”的不同字体行为的示例。并非所有字体的行为都相同:



