web-dev-qa-db-ja.com

グリフを削除して.OTFフォントをダウンサイジング

この質問がOpenTypeフォントについて特に尋ねられていないことは信じられませんが、これらのフォントからグリフを削除する方法を知っている人はいますか?

ファイルサイズが非常に大きい(約10MB).OTFがあり、それを小さくする必要があります。その理由は2つあります。

1)Web埋め込み用に準備しようとしているので、ファイルが小さいほど、クライアントにとって簡単です。

2)Font Squirrel(フォントファイルの簡単な準備に使用)には2MBのアップロード制限があります-代替手段があることは知っていますが、これまでのところ成功していません。無駄な時間を節約するために、私が試したが失敗したのは http://fontface.codeandmore.com/http://www.font2web.com/ です。 =。 CodeAndMore.comは機能しているように見えますが、それが吐き出すフォントは、私が与えたものとは完全に異なります。

私はフォントの専門家ではないので、簡単に答えてください。

25
shennan

この質問に答えるためのアカウントを作成しました。私はそれが古い質問であることを知っています。しかし、答えがないよりも遅い答えがある方が良いです。

私はちょうど同様の問題に遭遇しました。どうやら、グーグル可能な解決策はありません。したがって、私はPython2スクリプトを fontforge library で記述しました。

  • ソースフォントを受け入れます
  • 使用するすべての文字を含むファイルを受け入れます。翻訳ファイル、文字列アセットファイル、HTMLファイルなどがあります。
  • ファイルに表示されていない文字を削除してフォントを出力する

コードは次のとおりです。

#!/usr/bin/python2
import sys
import fontforge

if len(sys.argv) == 4:
    font = fontforge.open(sys.argv[1])

    f = open(sys.argv[2], "r")

    for i in f.read().decode("UTF-8"):
        font.selection[ord(i)] = True
    f.close()

    font.selection.invert()

    for i in font.selection.byGlyphs:
        font.removeGlyph(i)

    font.generate(sys.argv[3])
else:
    print "WARNING: Check the license of the source font\nbefore distributing the output font generated by this script.\nI'm not responsible for any legal issue caused by\ninappropriate use of this script!\n"
    print "Usage: {} [source font] [file with glyphs NOT to be removed] [output]".format(sys.argv[0])
    print "Example: {} /path/to/ukai.ttc chineseTranslation.txt ukaiStripped.ttf".format(sys.argv[0])

特定のフォントでこのスクリプトを使用することは合法ではない場合があることに注意してください。ソースフォントのライセンスを必ずチェックアウトしてください。私は、このスクリプトによって生成されたフォントの使用によって引き起こされた法的な問題については責任を負いません。

20
SadaleNet

FontToolsにはそれを行うpyftsubsetと呼ばれるプログラムがあります

https://github.com/behdad/fonttools

このような使用法:

pyftsubset MyFont.otf --output-file=MyFontStripped.otf --unicodes-file=file-of-codes.txt

File-of-codes.txtには、次のようなコードのリストが含まれています。

U+09c78
U+09ce5
U+09ce7
U+09ce9
U+09ceb
U+09cec
U+09cf0
U+09cf3
U+09cf4
U+09cf6
...
10
Wivlaro

最新のコメントに続いて:Shiftキーとコマンドキーを使用して、左側のメニュー(言語)で一度に複数のセットを一度に選択できます。画像は基本ラテン語(A-Z a-z)を保持していることに注意してください。セットを選択したら、グリフウィンドウをクリックしてすべて選択(cmd-A)します。このようにたくさんあると時間がかかります。次に、cmd-Deleteを実行すると、すべてが削除されます。 'Categories'で操作を繰り返すだけで完了です。次に、.otfをエクスポートします

Categories selectionLanguages selection

4
casasin

10 MBのOpenTypeフォントは非常に重いため、非常にまれです。したがって、これは社内固有のフォントであり、商用ではないと思います。グリフを削除するには、 FontForge (無料)またはその他の商用フォントエディターでフォントを編集し、その後.otf(または.ttf)を再生成します。

Webフォントを構築するために(.ttf、.svg、.eot、.woffが必要になると思います)、ローカルでいくつかの無料ツールを使用できます: sfnt2woffttf2eot 、- Batik SVG および ttfautohint を使用すると、変換を行う前に、フォントが画面上でどのように表示されるかを改善できます。

3
casasin

CTRL + Aと幅の設定の後にフォントを保存しようとしていたので、今日これに遭遇しました(ところで、そうしないでください)。 FontForgeですでにフォントを開いているので、もう少し簡単なPythonスクリプトアプローチを使用しました。

これは、目的のフォントが開いていて、アクティブになっていることを前提としています。また、最初の128文字(ASCII範囲)のみを保持することも想定しています。すべてを選択してから、「less」フラグを使用して0〜127の範囲の選択を解除します。選択を操作するさまざまな方法の詳細については、 FontForge Pythonスクリプトガイド )を参照してください。

ファイル>スクリプトの実行

font = fontforge.activeFont()
font.selection.all()
font.selection.select(("ranges","less"),0,127)
font.clear()
1
Alice Adz

fonttoolsがGoogleに採用されました: https://github.com/googlei18n/fonttools 。組み込みシステムで使用するために、 GoogleのNotoフォント のグリフの数を減らすために使用しています。御馳走になります!

0
Simon Williams