将双向文本打印到图像

5
我有一些使用PIL的Python代码,可以将UTF-8字符打印到图像上。
我注意到,对于连接阿拉伯文等双向脚本,相同的代码无法正确连接字符(只选择了初始形式,未利用中间和最终形式)。
请问有人能推荐解决这个特定问题的方法或技术吗?

我刚刚快速浏览了他们的网站,我的猜测是该库没有正确处理BIDI的能力。如果他们确实有这个功能,他们肯定不会宣传。 - happy coder
这个链接有帮助吗? - happy coder
2个回答

1

0
我所做的是:Python + Wand(Python库)+ arabic_reshaper(Python库)+ bidi.algorithme(Python库)。对于PIL / Pillow也是如此,您需要使用arabic_reshaper和bidi.algorithm,并将生成的文本传递给draw.text((10,25),artext,font = font):
from wand.image import Image as wImage
from wand.display import display as wdiplay
from wand.drawing import Drawing
from wand.color import Color
import arabic_reshaper
from bidi.algorithm import get_display

reshaped_text = arabic_reshaper.reshape(u'لغةٌ عربيّة')
artext = get_display(reshaped_text)

fonts = ['C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\DroidNaskh-Bold.ttf',
         'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\Thabit.ttf',
         'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\Thabit-Bold-Oblique.ttf',
         'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\Thabit-Bold.ttf',
         'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\Thabit-Oblique.ttf',
         'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\majalla.ttf',         
         'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\majallab.ttf',

         ]
draw = Drawing()
img =  wImage(width=1200,height=(len(fonts)+2)*60,background=Color('#ffffff')) 
#draw.fill_color(Color('#000000'))
draw.text_alignment = 'right';
draw.text_antialias = True
draw.text_encoding = 'utf-8'
#draw.text_interline_spacing = 1
#draw.text_interword_spacing = 15.0
draw.text_kerning = 0.0
for i in range(len(fonts)):
    font =  fonts[i]
    draw.font = font
    draw.font_size = 40
    draw.text(img.width / 2, 40+(i*60),artext)
    print draw.get_font_metrics(img,artext)
    draw(img)
draw.text(img.width / 2, 40+((i+1)*60),u'ناصر test')
draw(img)
img.save(filename='C:\\PATH\\OUTPUT\\arabictest.png'.format(r))
wdiplay(img)

Arabic typography in images


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接