3

誰かがこれを改善できますか?私は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'

それはまさに私が必要としているものです。これは、Linux(Linuxでテスト済み)だけでなく、Mac / Windowsシステムでも機能するように見えますか?もっと効率的にできるでしょうか?もっと読みやすいスタイルで?Mac / Windowsのフォントファイルの命名形式は異なりますか?提案を歓迎します。

4

2 に答える 2

1

私は少し書き直します(いくつかの変更はスタイルの問題であり、Pythonのようになります):

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

呼び出し元は、使用する要素を決定します (パーミッションなどを確認した後)。

互換性については、lib が「メイン」オペレーティング システム (X ウィンドウ マネージャー (linux)、windows、および os x) の共通ディレクトリのセットを使用してフォントを検索することを確認できます。ただし、アプリが実行されるさまざまな環境に関する詳細情報がある場合は、検索するディレクトリをいつでも渡すことができます。

于 2013-03-12T18:39:05.470 に答える
0

する際はご注意if searchFont in rowください。

誰かのユーザー名が marial で、 を使用してフォント arial を検索している場合findFontFile('arial')、コードはユーザーのホーム ディレクトリ (つまり、/home/marial/.fonts) にインストールされているすべてのフォントを取得します。

于 2013-03-13T05:33:50.610 に答える