我正在尝试使用pillow
和textsize()
“预测” 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的浏览器):
但是,尝试用枕头获得相同的结果,结果却大不相同:
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]。