集中图像输出中的文本错误
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))
这导致整个字符正确居中,拉丁字母和阿拉伯字母相同。
下面的代码没有集中文本代码没有错误,但我想集中文本。
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))
这导致整个字符正确居中,拉丁字母和阿拉伯字母相同。