集中图像输出中的文本错误

Centralize text in image outputs error

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

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)

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

为什么不改变?因为您加载了一种字体,但没有使用它进行测量。如果您将它设置在 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))

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