有趣的是,经过5年,在@Nasser Al-Wohaibi的大力帮助下,我意识到了如何做到这一点:
需要使用BIDI算法反转文本。
# -*- 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) # <--- here's the magic <---
draw.text( (10,50), 'after BiDi: ' + t2, fill=220, font=font)
img.save( 'bidi-test.png')
@Nasser的答案具有附加价值,该价值可能仅与阿拉伯语文本有关(阿拉伯字母根据其近义字母变化形状和相联性的字母,希伯来语中的所有字母均分开),因此仅比迪烟语部分与该问题有关。
在采样结果中,第二行是正确的形式,并且发声标记的位置正确。
谢谢@tzot的帮助+代码段
提案:
希伯来语“ nikud”的不同字体行为的示例。并非所有字体的行为都相同: