[python][转载]测量文本宽高

Posted FL1623863129

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[python][转载]测量文本宽高相关的知识,希望对你有一定的参考价值。

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个字符

最佳答案

紧排
你在这里做了两件不同的事情:
查找长文本的宽度。
找出所有字符的宽度,然后盲目地将它们加在一起
如果您使用的是单空间字体,则可能会有所不同,但字体通常使用称为紧排的字体,以使文本更平滑、更紧凑。
说:
在排版技术中,紧排是调整成比例字体中字符间距的过程,通常是为了获得令人满意的视觉效果。紧排调整单个字母窗体之间的间距,而跟踪(字母间距)则在一系列字符上均匀地调整间距。在紧排字体中,每对字符之间的二维空白区域在视觉上都相似。
Wikipedia
以下是一些:

引擎盖下面
在引擎盖下,枕头对你的两种方法没什么不同。只是你用不同的方式给他们打电话。
如果您添加第三种方法以使用与方法2中相同的函数获得整个句子的宽度,您还将获得与方法1中相同的宽度:

<span style="background-color:#fefefe"><span style="color:#222222"><code># METHOD 3
width = font.getsize(sample)[0]
print width
</code></span></span>


以下是枕头(方法一和方法三):

<span style="background-color:#fefefe"><span style="color:#222222"><code>def textsize(self, text, font=None, *args, **kwargs):
    """Get the size of a given string, in pixels."""
    if self._multiline_check(text):
        return self.multiline_textsize(text, font, *args, **kwargs)

    if font is None:
        font = self.getfont()
    return font.getsize(text)
</code></span></span>


对于单行文本,这只是返回与方法2相同的ImageDraw.textsize。(对于多行文本,它只将其拆分为多行,并返回多个调用的总和。)

关于python - 测量文本宽度(Python/PIL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43828955/

以上是关于[python][转载]测量文本宽高的主要内容,如果未能解决你的问题,请参考以下文章

使用Python PIL库获取某个字体渲染后的文本的宽高(应用于检测翻译后的文本是否长度过长)

Selenium2+python自动化23-富文本(自动发帖)转载

Selenium2+python自动化24-js处理富文本(带iframe)转载

转载python解决文本乱码问题及文本二进制读取后的处理

测量屏幕宽高

Python植物大战僵尸