如何强制阿拉伯字符分开?

2024-06-08 21:53:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用枕头在图像上输入一组没有空格的阿拉伯字符。我现在遇到的问题是,一些阿拉伯字符在相邻时,在分开时会出现不同的显示方式(例如سل在相邻时会是سل)。我试图通过某种方式强制字体设置总是分开所有字符,而不插入任何其他字符,我该怎么办?你知道吗

以下是我的代码片段:

#font is an arabic font, and font_path is pointing to that location.
        font = ImageFont.truetype(
            font=font_path, size=size,
            layout_engine=ImageFont.LAYOUT_RAQM)

        h, w = font.getsize(text, direction='rtl')
        offset = font.getoffset(text)
        H, W = int(1.5 * h), int(1.5 * w)
        imgSize = H, W
        img = Image.new(mode='1', size=imgSize, color=0)
        draw = ImageDraw.Draw(img)
        pos = ((H-h)/2, (W-w)/2)
        draw.text(pos, text, fill=255, font=font,
                  direction='rtl', align='center')

Tags: pathtextposimgsizeis字符int
1条回答
网友
1楼 · 发布于 2024-06-08 21:53:08

您所描述的可能一些支持阿拉伯语的字体有关,特别是那些在Unicode的Arabic Presentation Forms-B块中编码位置敏感形式的字体。您需要将输入的文本字符代码映射到正确的位置变量中。因此,对于您描述的示例字符seenlam,U+0633س‎和U+0644ل‎,您需要U+0633的初始形式,即U+FEB3ﺳ‎‎,以及U+0644的最终形式,即U+FEDE,将它们放在一起(用规则空格分隔):ﺳ‌ ﻞ‌。你知道吗

有一个有用的图表显示了https://en.wikipedia.org/wiki/Arabic_script_in_Unicode#Contextual_forms处的位置形式。你知道吗

但是,重要的是要理解:

  • 并非所有包含阿拉伯语的字体都对表示形式进行了编码(许多字体没有编码)

  • 并不是所有的阿拉伯语代码在表示形式范围内都有一个等价物(大多数基本代码都有,但是对于其他没有表示形式的语言,有一些扩展的阿拉伯语字符)。

  • 您负责根据单词/组上下文将输入文本(在U+06xx范围内)处理为正确的表示形式(U+FExx范围)代码,这可能很棘手。该作业通常属于OpenType布局引擎,但它也执行连接。所以你基本上推翻了这个逻辑。

相关问题 更多 >