集中文本输出错误

时间:2018-01-10 21:15:02

标签: numpy opencv unicode python-imaging-library python-3.5

下面的代码没有集中文本代码中没有错误,但我想集中文本。

import os
unicode_text = u"\u0627\u0628\u067E"
list_of_letters = list (unicode_text) 

        char = u''.join(word) 
        t1 = arabic_reshaper.reshape(char) 
        W,H= (32, 32)
        img= PIL.Image.new('RGBA', (W, H), (255, 255, 255),)
        draw = PIL.ImageDraw.Draw(img)   
        font = PIL.ImageFont.truetype( r"C:\Downloads\arabic.ttf", 15)
        t2 = get_display(t1) 
        w, h = draw.textsize(t2.encode('utf-8'))
        draw.text(((W-w)/2,(H-h)/2), t2, fill="#000000", font=font)

1 个答案:

答案 0 :(得分:0)

您的代码无法正确居中,因为它无法检索实际字符的宽度和高度。如果打印出textsize返回的字符大小,然后更改字体大小,则可以看到。你仍然可以得到相同的字符大小!

为什么不改变?因为你加载了一个字体但是没有使用进行测量。如果您在draw对象中设置它,或者将font=font添加到draw.textsize draw.text,它会按预期工作。

(这样做会导致原始textsize行出错;可能您尝试通过添加.encode('utf8)以不相关的方式解决问题。但这不是必需的。)

draw = PIL.ImageDraw.Draw(img)
draw.font = PIL.ImageFont.truetype( "times.ttf", 48)
t2 = get_display(t1) 
w, h = draw.textsize(t2)
draw.text(((W-w)/2,(H-h)/2), t2, fill="#000000")
print ("char: %04X w %d h %d" % (ord(char),w,h))

这导致整个字符正确居中,拉丁字母和阿拉伯字母都相同。

centered colon centered capital I centered isolated teh centered isolated hah