首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python上计算字符串的宽/高

在python上计算字符串的宽/高
EN

Stack Overflow用户
提问于 2018-02-15 02:13:50
回答 1查看 474关注 0票数 2

我正在尝试计算各种字符串的高度/宽度(给定字体和大小)。我在试着跟踪this example。我写了以下内容:

代码语言:javascript
复制
from matplotlib import rcParams
import os.path
afm_fname = os.path.join(rcParams['datapath'], 'fonts', 'afm', 'ptmr8a.afm')

from matplotlib.afm import AFM
with open(afm_fname) as fh:
    afm = AFM(fh)

但我得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<pyshell#15>", line 2, in <module>
    afm = AFM(fh)
  File "C:\Python\lib\site-packages\matplotlib\afm.py", line 337, in __init__
    parse_afm(fh)
  File "C:\Python\lib\site-packages\matplotlib\afm.py", line 323, in parse_afm
    _sanity_check(fh)
  File "C:\Python\lib\site-packages\matplotlib\afm.py", line 102, in _sanity_check
    if not line.startswith(b'StartFontMetrics'):
TypeError: startswith first arg must be str or a tuple of str, not bytes

任何帮助都是非常感谢的。注意,我不需要使用matplotlib,所以如果有更好的方法在python中获取这些数字,我愿意选择其他方法(如果重要,文本最终将用于SVG)。

我也尝试过使用freetype-py,但是遇到了比'import freetype‘更深入的问题-我认为由于windows上freetype的问题,它似乎找不到合适的dll。在github repo上有很多关于它的问题,但是还没有找到我的问题的解决方案。无论什么解决方案:任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-15 08:25:23

这确实是一个python 2 to 3问题(https://docs.python.org/3/howto/pyporting.html#text-versus-binary-data),在他们的代码中使用AFM硬编码的二进制字符串。一种解决方案是显式地以二进制模式打开afm_fname,如果这对您来说没问题的话。

代码语言:javascript
复制
from matplotlib import rcParams
import os.path
afm_fname = os.path.join(rcParams['datapath'],
                        'fonts', 'afm', 'ptmr8a.afm')

from matplotlib.afm import AFM
with open(afm_fname, 'rb') as fh:
    afm = AFM(fh)
afm.string_width_height('What the heck?')

# (6220.0, 694)

字符串方法startswith适用于Python2中的文本和二进制数据,因此上面的代码也适用于Python2。Python3区分文本和二进制数据。所以'rb'是必要的。matplotlib中的示例可能需要更新或注释。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48793711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档