技術

フォントファイルからフォント名の一覧を作成する

ちょっとフォント名(フォントファミリ名)からフォントのファイル名を検索したかったので、その一覧を作成するスクリプトを書いた。
ただ、諸般の事情で無駄になってしまった。
そのままお蔵入りさせるのも勿体無いので公開。

動作確認した環境は、Mac OS X 10.8.4、OS標準のPython 2.7。
pip install freetype-py 等でfreetype-pyをインストールする必要がある。
あと、 brew install freetype 等でfreetypeのバイナリをインストールする必要があるかも。

説明

./list_font_name.py "フォントファイルもしくはフォントを設置したディレクトリのパス"

-rオプションで再帰的にディレクトリをたどる。(つまりデフォルトでは指定したディレクトリ直下のファイルのみ調べる。)

出力は、”フォントファイル名, フォントファミリ名”のリストとなる。
フォントファイルじゃないものがあったり、freetypeが認識に失敗したらフォントファミリ名として”不明”と表示される。

あと、サッと適当に書いたソースなので注意。

ソース

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
パラメータで渡されたディレクトリの中にあるフォントファイルのフォント名(フォントファミリ名)を一覧表示する。
要 freetype-py
'''

import os.path
import sys
import freetype
from optparse import OptionParser


def main(dir_path, do_recursive):
    if do_recursive:
        for root, dirs, files in os.walk(dir_path):
            for fname in files:
                path = os.path.join(root, fname)
                print_font_name(path)
        
    else:
        for fname in os.listdir(dir_path):
            path = os.path.join(dir_path, fname)
            print_font_name(path)


def print_font_name(font_path):
    if not os.path.isfile(font_path):
        return
        
    try:
        face = freetype.Face(font_path)
        print "%s, %s" % (os.path.basename(font_path), face.family_name)
    except (freetype.ft_errors.FT_Exception):
        print "%s, %s" % (os.path.basename(font_path), "不明")


if __name__ == "__main__":
    parser = OptionParser()
    parser.add_option("-r", "--recursive",
        action = "store_true",
        dest = "recursive",
        default = False,
        help = "ディレクトリを再帰的に処理する。")
    
    (options, args) = parser.parse_args()
    
    if len(args) < 1:
        print "エラー: 処理するフォントファイルまたはディレクトリを指定してください。"
        sys.exit(1)
    
    path = os.path.abspath(args[0])
    if not os.path.exists(path):
        print "エラー: フォントファイルまたはディレクトリが存在しません。"
        sys.exit(1)
    
    if os.path.isdir(path):
        main(path, options.recursive)
    elif os.path.isfile(path):
        print_font_name(path)
    else:
        print "エラー: ファイルまたはディレクトリを指定してください。"
        sys.exit(1)

コメントを残す

メールアドレスが公開されることはありません。



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください