枕头textsize()和SVG渲染之间的区别

时间:2019-07-15 12:29:41

标签: python css svg text python-imaging-library

我正在尝试使用pillowtextsize()“预测” python生成的svg文本大小。

这是示例SVG:

<svg width="200" height="30" xmlns="http://www.w3.org/2000/svg">
  <style>
    .label {
      color: black; 
      font: 14pt 'Inconsolata'; 
    }
  </style>
  <text x="0" y="20" class="label">
    I love SVG!
  </text>
</svg>

结果似乎是102.64 x 19(根据基于Chromium的浏览器): enter image description here

但是,尝试用枕头获得相同的结果,结果却大不相同:

from PIL import Image, ImageFont, ImageDraw

txt = "I love SVG!"
font = ImageFont.truetype("C:\\Windows\\Fonts\\Inconsolata.otf", 14)
img = Image.new('RGB', (150, 30), color = (73, 109, 137))
draw_txt = ImageDraw.Draw(img)
width, height = draw_txt.textsize(txt, font=font)
print(f"Text size for \"{txt}\" = {width} x {height}")

Text size for "I love SVG!" = 154px x 25px

我期待一些差异,但是差异不大,为什么呢?

我怀疑单位类型有问题,但是在SVG中pt到px的转换做得很好,并且在枕头侧,ImageFont构造函数指定输入大小为磅,textsize()输出为应该以像素为单位。


注意:出于此示例目的,我使用的是Inconsolata字体,如果要运行上述python脚本,可以下载[here]

0 个答案:

没有答案