GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

fonttools

fonttools – Pythonからフォントファイルを操作するライブラリ

投稿日:

Pythonからフォントファイルを操作するライブラリ。 https://groups.google.com/d/forum/fon…

これは何ですか?

fontToolsは、Pythonで書かれたフォントを操作するためのライブラリです。 このプロジェクトには、TrueTypeフォントとOpenTypeフォントをTTXとも呼ばれるXMLテキスト形式との間で変換できるTTXツールが含まれています。 これは、TrueType、OpenType、AFM、Extent Type 1、およびMac固有のフォーマットに対応しています。 プロジェクトにはMITのオープンソースライセンスがあります。
とりわけ、これは無料で使用できることを意味します。

インストール

FontToolsには、 Python 2.7,3.4以降が必要です

パッケージはPython Package Index(PyPI)にリストされているので、 pipでインストールすることができます:

pip install fonttools

開発に貢献したい場合は、Githubからリポジトリを複製し、パッケージを「編集可能」モードでインストールし、ソースコードを修正してください。 virtualenvまたはPython 3 venvモジュールを使用して仮想環境を作成することをお勧めします。

# download the source code to 'fonttools' folder
git clone https://github.com/fonttools/fonttools.git
cd fonttools

# create new virtual environment called e.g. 'fonttools-venv', or anything you like
python -m virtualenv fonttools-venv

# source the `activate` shell script to enter the environment (Un\*x); to exit, just type `deactivate`
. fonttools-venv/bin/activate

# to activate the virtual environment in Windows `cmd.exe`, do
fonttools-venv\Scripts\activate.bat

# install in 'editable' mode
pip install -e .

TTX – OpenTypeとTrueTypeからXMLとBackへ

インストールしたら、 ttxコマンドを使用して、バイナリフォントファイル( .otf.ttfなど)をTTX xml形式に変換し、編集してバイナリ形式に戻すことができます。 TTXファイルの拡張子は.ttxです。

ttx /path/to/font.otf
ttx /path/to/font.ttx

TTXアプリケーションの動作は、実行するプラットフォームに応じて2つの方法で使用できます。

  • コマンドラインツール(Windows / DOS、Unix、MacOSX)として、
  • ファイルをアプリケーションにドロップすることで(Windows、MacOS)

TTXは、どのような種類のファイルが検出されたかを検出します.ttxまたは.otf.ttxファイルが出力され、 .ttxファイルの場合は.ttfまたは.otfがコンパイルされます。 デフォルトでは、出力ファイルは入力ファイルと同じフォルダに作成され、入力ファイルと同じ名前になりますが、拡張子は異なります。 TTXは既存のファイルを上書きすることはありませんが、必要に応じてArial#1.ttfなどの出力ファイル名(拡張子の前に)に一意の番号を追加しますArial#1.ttf

コマンドラインからTTXを使用する場合は、コマンドプロンプトでttx -hと入力すると表示されるヘルプテキストに説明されているような追加のオプションがあります。 以下の追加オプションがあります。

  • 出力ファイルが作成されるフォルダを指定する
  • どのテーブルをダンプするか、またはどのテーブルを除外するかを指定する
  • 部分.ttxファイルと既存の.ttfファイルまたは.otfファイルを.otfする
  • .ttxにダンプするのではなく、簡単なテーブル情報を一覧表示する
  • .ttxファイルを分割するためにテーブルを分割する
  • TrueType命令のディスアセンブルを無効にする

TTXファイル形式

現在、次の表がサポートされています。

BASE, CBDT, CBLC, CFF, CFF2, COLR, CPAL, DSIG, EBDT, EBLC, FFTM,
Feat, GDEF, GMAP, GPKG, GPOS, GSUB, Glat, Gloc, HVAR, JSTF, LTSH,
MATH, META, MVAR, OS/2, SING, STAT, SVG, Silf, Sill, TSI0, TSI1,
TSI2, TSI3, TSI5, TSIB, TSID, TSIJ, TSIP, TSIS, TSIV, TTFA, VDMX,
VORG, VVAR, ankr, avar, bsln, cidg, cmap, cvar, cvt, feat, fpgm,
fvar, gasp, gcid, glyf, gvar, hdmx, head, hhea, hmtx, kern, lcar,
loca, ltag, maxp, meta, mort, morx, name, opbd, post, prep, prop,
sbix, trak, vhea and vmtx

他のテーブルは16進データとしてダンプされます。

TrueTypeフォントは、グリフインデックス(GlyphID)を使用して、ほとんどの場所でグリフを参照します。 これはバイナリ形式では問題ありませんが、人間にとっては非常に難しい作業です。 したがって、代わりに名前を使用します。

グリフ名は、 CFFテーブルまたはpostテーブルから抽出されるか、Unicode cmapテーブルから派生します。 後者の場合、Adobeグリフリストは、Unicode値に基づいて名前を計算するために使用されます。 これらのメソッドがすべて失敗した場合、名前はGlyphIDに基づいて作成されます(例: glyph00142

異なるグリフが同じ名前を使用する可能性があります。 この場合、名前に#nを付けることで名前を一意にします( nは整数です)。元の名前は保持されているので、これは “ラウンドトリップ”フォントに影響しません。

グリフがバイナリフォント内に格納される順序が重要なので、フォント内のグリフ名の順序付きリストを維持します。

その他のツール

フォントの検査、マージ、およびサブセット用のコマンドも使用できます。

pyftinspect
pyftmerge
pyftsubset

fontTools Pythonモジュール

fontToolsのpythonモジュールは、プログラムでフォントファイルを編集する便利な方法を提供します。

>>> from fontTools.ttLib import TTFont
>>> font = TTFont('/path/to/font.ttf')
>>> font
<fontTools.ttLib.TTFont object at 0x10c34ed50>
>>>

Pythonプログラムのサンプルは、 Snippetsディレクトリにあります。

オプション要件

現在、 fontToolsパッケージには、Python標準ライブラリに含まれているモジュールのほかに、(必要な)外部依存関係はありません。 しかし、モジュールのいくつかは、オプション機能のロックを解除するために必要ないくつかの余分な依存関係が必要です。

  • Lib/fontTools/ttLib/woff2.py

    WOFF 2.0 Webフォントを圧縮/解凍するためのモジュール。 必要なもの:

    • brotli :Brotli圧縮ライブラリのPythonバインディング。
  • Lib/fontTools/ttLib/sfnt.py

    WOFF 1.0 Webフォントをより良く圧縮するために、組み込みのzlibライブラリの代わりに次のモジュールを使用することができます:

    • zopfli :Zopfli圧縮ライブラリのPythonバインディング。
  • Lib/fontTools/unicode.py

    ttxを使用してcmapテーブルをダンプするときにUnicode文字名を表示するには、標準ライブラリのunicodedataモジュールを使用します。 そこに含まれるバージョンは、Pythonのバージョンによって異なります。 最新のデータを使用するには、次のものをインストールできます。

    • unicodedata2 :Python 2.7および3.5用のunicodedataバックポートが、最新のUnicodeバージョン9.0にアップデートされました。 Python 3.6を使用している場合は、最新のunicodedataデータが既に付属しているため、これは不要です。
  • Lib/fontTools/varLib/interpolatable.py

    異なるマスター間で間違った輪郭/コンポーネントの順序を見つけるためのモジュール。 これは、いわゆる「2つのグラフの最小重み完全一致問題」または割り当て問題を解決するために、以下のパッケージの1つを必要とします。

    • scipyNumPy配列を内部的に使用するPythonの科学ライブラリ。したがって非常に高速です。
    • munkres :ハンガリーまたはKuhn-Munkresアルゴリズムを実装した純粋なPythonモジュール。
  • Lib/fontTools/misc/symfont.py

    シンボリックフォント統計分析のための高度なモジュール。 必要なもの:

    • sympy :記号的な数学のためのPythonライブラリ。
  • Lib/fontTools/t1Lib.py

    古いMacOSモジュールはもはやMac Pythonには含まれていないため、Python 3上でファイル作成者とMacintosh PostScript Type 1フォントのタイプを取得するには、次のモジュールをインストールする必要があります。

    • xattr :拡張ファイルシステム属性用のPythonラッパー(macOSプラットフォームのみ)。
  • Lib/fontTools/pens/cocoaPen.py

    Cocoa NSBezierPathを使用してグリフを描画するためのペンには、次のものが必要です。

    • PyObjC :PythonとObjective-Cランタイム間のブリッジ(macOSプラットフォームのみ)。
  • Lib/fontTools/pens/qtPen.py

    QtのQPainterPathを使用してグリフを描画するペンには、次のものが必要です。

    • PyQt5 :QtクロスプラットフォームUIとアプリケーションツールキットのためのPythonバインディング。
  • Lib/fontTools/pens/reportLabPen.py

    グリフをPNG画像として描画するペンには、次のものが必要です。

    • reportlab :PDFとグラフィックを生成するためのPythonツールキット。
  • Lib/fontTools/inspect.py

    GUIフォントインスペクタでは、次のパッケージのいずれかが必要です。

    • PyGTK :GTK 2.x用のPythonバインディング(Python 2でのみ動作します)。
    • PyGObject :GTK 3.xのPythonバインディングとgobject-introspectionライブラリ(Python 3と互換性があります)。

テスト

テストスイートを実行するには、次のようにします。

python setup.py test

pytestがある場合は、 pytestコマンドを直接実行できます。 テストは、インストールされたfontToolsパッケージ、またはPYTHONPATHで最初に見つかったパッケージに対して実行されます。

また、 toxを使用して、隔離された仮想環境内の異なるPythonバージョンでテストを自動的に実行することもできます。

pip install tox
tox

引数なしでtoxを実行すると、tox.iniのenvlistリストされているすべての環境に対してテストが実行されます。 私たちの場合、これにはPython 2.7と3.6が含まれています。このためには、 python2.7python3.6実行可能ファイルがあなたのPATHで利用可能でなければなりません。

代替環境リストは、 -eオプションまたはTOXENV環境変数を使用して指定できます。

tox -e py27-nocov
TOXENV="py36-cov,htmlcov" tox

開発コミュニティ

TTX / FontToolsの開発は、主要なソフトウェア企業やタイプファウンダリや趣味の者に雇われているプロの開発者を含む、開発者の活発なコミュニティで進行中です。

フィーチャーリクエストとバグレポートはいつでも歓迎します。https://github.com/fonttools/fonttools/issues/

エンドユーザーの視点からのTTXやTTX / FontToolsの開発に関する議論のための最適な場所はhttps://groups.google.com/d/forum/fonttoolsメーリングリストです。 継続的な統合通知の開発https://groups.google.com/d/forum/fonttools-devメーリングリストもあります behdad@behdad.orgで Behdadに個人的にメールを送ることもできます

歴史

fontToolsプロジェクトは1999年にJust van Rossumによって始められ、http://sourceforge.net/projects/fonttools/でオープンソースプロジェクトとして維持されていました。 2008年、ポール・ワイズ(pabs3)は安定性維持のためにJustを支援し始めました。 2013年にBehdad Esfahbodはフレンドリーなフォークを開始し、コードベースを徹底的に見直し、新しい機能を追加して新しいフォントフォーマットをサポートするためにhttps://github.com/behdad/fonttoolsで変更を加えました。

謝辞

アルファベット順:

Hannes Famira、Sam Fishman、Matt Fontaine、Douglas、Douglas、Douglas、Douglas、Douglas、ヤニス・ハラランビウス、グレッグ・ヒッチコック、ジェレミー・ホーナス、カレイド・ホスニー、ジョン・ハドソン、デニス・モヨゴ・ジャクリー、ジャック・ジャンセン、トム・カッキンスキー、ジェンス・クトイルク、アントワーヌ・レカ、ヴェルナー・ランベルグ、タル・レミング、ピーター・ロフト、コジモ・ルポ、中村正也、 Penney、Roozbeh Pournader、Garret Rieger、Read Roberts、Guido van Rossum、Just van Rossum、Andreas Seidel、Georg Seifert、Miguel Sousa、Adam Twardoch、AdrienTétar、Vitaly Volkov、Paul Wise。

著作権

Copyright(c)1999-2004 Just van Rossum、LettError( just@letterror.com
完全なライセンスについては、「 ライセンス 」を参照してください。

Copyright(c)2000 BeOpen.com。 全著作権所有。

Copyright(c)1995-2001全国研究イニシアチブ株式会社。 全著作権所有。

Copyright(c)1991-1995 Stichting Mathematisch Centrum、アムステルダム。 全著作権所有。

楽しむ!







-fonttools

執筆者: