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

问题描述 投票:2回答:1

我正在尝试使用枕头在图像上键入一组没有空格的阿拉伯字符。我现在面临的问题是,当它们彼此相邻时,一些阿拉伯字符在它们分开时显得不同。((例如سل将彼此相邻时将是سل。)我试图以某种方式强迫我的字体设置总是分开所有字符而不注入任何其他字符,我该怎么办?

这是我的代码片段:

#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')
python fonts python-imaging-library arabic
1个回答
2
投票

您可以使用支持阿拉伯语的某些字体来描述您所描述的内容,特别是那些在Arabic Presentation Forms-B Unicode块中编码位置敏感形式的字体。您需要将输入文本字符代码映射到正确的位置变体。所以对于你所描述的示例字符和你所描述的lam,U + 0633 س‎和U + 0644 ل‎,你想要U + 0633的初始形式,即U + FEB3 ﺳ‎‎,以及U + 0644的最终形式,这是U + FEDE ,将它们放在一起(由常规空间隔开):ﺳ‌ ﻞ‌

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

但是,重要的是要理解:

  • 并非所有包含阿拉伯语的字体都有编码的表示形式(许多字体不编码)
  • 并非所有的阿拉伯语代码在Presentation Forms范围内都有一个等价物(大多数基本代码都有,但是对于没有Presentation Forms的其他语言,有一些扩展的阿拉伯字符)。
  • 您负责根据单词/组上下文将输入文本(在U + 06xx范围内)处理为正确的表示形式(U + FExx范围),这可能很棘手。该作业通常属于OpenType布局引擎,但它也会执行加入。所以你基本上压倒了那个逻辑。
© www.soinside.com 2019 - 2024. All rights reserved.