Python 如何获取(web)字体中单个字符的大小?

Python 如何获取(web)字体中单个字符的大小?,python,fonts,svg,font-size,Python,Fonts,Svg,Font Size,为了生成SVG文件,我编写了一个python脚本。这个SVG文件使用web字体(通过CSS从google webfonts导入)来很好地呈现文本。一切都很好,只是我需要知道一个句子的大小(以像素为单位),然后再将其放入SVG文件中 当我几天前开始学习python时,我不知道这种东西是否可行。Google帮助我找到了ImageFont python模块(来自python图像库),但ImageFont似乎需要从本地路径加载字体文件以计算字符大小 有没有可能在web字体上计算字符大小的方法存在 谢谢您

为了生成SVG文件,我编写了一个python脚本。这个SVG文件使用web字体(通过CSS从google webfonts导入)来很好地呈现文本。一切都很好,只是我需要知道一个句子的大小(以像素为单位),然后再将其放入SVG文件中

当我几天前开始学习python时,我不知道这种东西是否可行。Google帮助我找到了ImageFont python模块(来自python图像库),但ImageFont似乎需要从本地路径加载字体文件以计算字符大小

有没有可能在web字体上计算字符大小的方法存在


谢谢您的帮助。

您每次都会使用相同的字体吗?如果是这样:获取字体的本地副本,在本地运行测试,并缓存它们(SQLite数据库?Python模块中存储的宽度数组?这部分由您决定)。但是,请注意,由于以下原因,句子的宽度可能与其字符宽度之和不相同。如果你想准确,你需要计算句子本身的宽度

但是,这真的需要在服务器上完成吗?例如,如果您的客户机是web浏览器,您可以使用类似jQuery的方法来询问浏览器元素的实际大小,或者


更好的做法可能是使用更“流畅”的布局设计SVG,并期望元素可以增长或收缩到任意大小,并使用纯哑代码,如
elementtext=elementtext[:100]
将其长度限制在某个预定阈值内。基本上,确保它最多可以处理一定数量的文本,然后确保您不会使用超过那个数量的文本。您没有使用独立声明作为文本标签,对吗?

您可以使用javascript和SVG DOM在客户端实现它

第一步:创建一个文本元素,并使用getComputedTextLength()方法()计算其长度

foo
然后使用getTotalLength()方法()计算路径长度


你还可以计算文本在被截断之前可以放置多少次。

为什么你需要知道句子的大小?它是关于文本换行的吗?实际上我有路径作为文本路径。在这条路上,我有一句话要重复,直到走到尽头。例如,如果我的单词是foo,我会在路径上尽可能多地重复“foo”。在阅读了你的答案(好答案,顺便说一句)后,我明白我的问题并不完全是个问题。实际上,我在开发过程中使用CSS轻松地改变样式,并测试了一些东西,但当我询问我的web字体问题时,我忘记了脚本的一个主要需求:导出的SVG必须由Gimp/Inkscape/Illustrator可读。显然,使用CSS是不可能的,所以webfonts将不是一个选项(或者我在这一点上也错了)。然后我将使用本地字体和web字体来执行测试。首先,感谢您的快速回答。事实上,我可能会使用几种不同的字体。紧排是一个真正的问题,但它只取决于我使用的解决方案。多亏了SVG,只要我可以手动设置,SVG内核就不是什么大问题(我想我在SVG文档中读到了一些关于这方面的内容)。无论如何,我计划写长句,不是独立宣言,而是足够长的句子,使elementtext[:100]无效,我想(无论如何,我必须测试一下)。关于在客户端使用Javascript,这是一个可以接受的答案,但正如我告诉@Tangui的那样,我的部分问题是错误的。
<text id="foo" xml:space="preserve">foo </text>