Python - 查找TTF文件

时间:2013-03-12 15:32:19

标签: python true-type-fonts

有人可以改进吗?我是python的新手,我正在尝试编写可移植代码。我需要找到一个字体文件传递给ImageDraw.Draw.Text。

import matplotlib.font_manager as fontman

def findFontFile(searchFont):
    fList = fontman.findSystemFonts(fontpaths=None, fontext='ttf')
    targetFont = []
    for row in fList:
        try:
            if searchFont in row:
                targetFont.append(row)
        except TypeError:
            pass
    return targetFont[0]

在我的系统上,这给了我:

>>> findFontFile('DejaVuSans.ttf')
'/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf'

这正是我需要的。这看起来是否适用于Mac / Windows系统以及Linux(在Linux上测试)?它可以更有效地完成吗?以更易读的风格? Mac / Windows会有不同的字体文件命名格式吗?建议欢迎。

2 个答案:

答案 0 :(得分:1)

我会做一点改写(有些改变只是风格问题,更像是python):

   def find_font_file(query):
       matches = list(filter(lambda path: query in os.path.basename(path), fontman.findSystemFonts()))
       return matches

然后调用者将决定要使用的元素(在检查权限等之后)。

至于兼容性,你可以查看here lib使用一组公共目录来“主”操作系统来搜索字体(X窗口管理器(linux),windows和os x)。但是,如果您有关于应用程序将要运行的不同环境的更多信息,您可以随时传递要搜索的目录。

答案 1 :(得分:0)

在执行if searchFont in row时要小心。

如果某人的用户名是marial,并且您正在使用findFontFile('arial')搜索字体arial,那么您的代码将获得安装在用户主目录中的所有字体(即/ home / marial / .fonts即可)。