有趣的是,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 的答案具有额外的价值,可能仅与阿拉伯语文本相关(阿拉伯语中的字母会根据它们的邻接字母改变形状和连通性,在希伯来语中所有字母都是分开的),因此只有比迪部分与这个问题相关。
在示例结果中,第 2 行是正确的形式,正确的发声标记定位。
谢谢@tzot 的帮助 + 代码片段
一个提议:
希伯来语“nikud”的不同字体行为示例。并非所有字体的行为都相同: