我正在使用以下两种方法来计算设置字体和大小的样本字符串的渲染宽度:
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 14)
sample = "Lorem ipsum dolor sit amet, partem periculis an duo, eum lorem paulo an, mazim feugiat lobortis sea ut. In est error eirmod vituperata, prima iudicabit rationibus mel et. Paulo accumsan ad sit, et modus assueverit eum. Quod homero adversarium vel ne, mel noster dolorum te, qui ea senserit argumentum complectitur. Duo at laudem explicari deterruisset, eu quo hinc mnesarchum. Vel autem insolens atomorum at, dolorum suavitate voluptatum duo ex."
#METHOD 1
draw_txt = ImageDraw.Draw(img)
width, height = draw_txt.textsize(sample, font=font)
print width
#METHOD 2
width = 0
for c in sample:
width += font.getsize(c)[0]
print width
METHOD 1
的宽度为 3236
,而 METHOD 2
的值为 3270
。为什么会有差异?此外,我还注意到样本文本越短,这两种方法之间的差异就越小。
内部发生了什么?哪个宽度可以被认为是呈现句子的真实宽度?最后,是否有一种微调方法可以使这两种方法报告的宽度大致相同?
注意:样本文本长度为445个字符