有人可以改进吗?我是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会有不同的字体文件命名格式吗?建议欢迎。
答案 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即可)。