【发布时间】:2019-12-04 05:14:36
【问题描述】:
我使用以下两种方法来计算一个示例字符串的渲染 width 设置字体类型和大小:
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。为什么会出现差异?此外,我还注意到示例文本越短,这两种方法之间的差异就越小。
引擎盖下发生了什么?哪个宽度可以被认为是渲染句子的 true 宽度?最后,我可以做一些调整来让两种方法报告大致相同的宽度吗?
注意:示例文本长度为 445 个字符
【问题讨论】:
标签: python python-imaging-library text-processing pillow