Help us understand the problem. What is going on with this article?

必要なグリフだけを残してフォントの容量を削減

More than 5 years have passed since last update.

日本語フォントは容量が大きいので、スマートフォンアプリやウェブアプリではあまり気軽に使用することができません。
そこで、一部の文字だけを抽出したフォントを作成して、容量を削減します。

FontForge

FontForgeはGUIでフォントを編集できるクロスプラットフォームのツールです。
当然、選択した文字(グリフ)を削除する機能もあります。しかし、さすがに手作業でやるのは面倒くさい。

そこで、FontForgeのスクリプト機能を使用します。
http://fontforge.org/ja/scripting.html
なんと!日本語化されたドキュメントがあります!

使用する文字の準備

まず、使用する文字を列挙したファイルを作成します。今回はused_letters.txtというファイル名でUTF-8にして保存しました。

さっそくFontForgeスクリプトを実行したいところですが、FontForgeスクリプトの機能は貧弱です。UTF-8のデコードができません。

そこで、簡単なスクリプトを書いてFontForgeスクリプト自身を生成します。

#conding: utf-8
$stdout = File.open("./select_used.pe", "w")

print "codepoints = "
p File.read("used_letters.txt", encoding:"utf-8").codepoints
print <<EOM
i = 0
len = SizeOf(codepoints)
while (i < len)
    SelectMore(codepoints[i], codepoints[i])
    ++i
endloop
EOM

以下のようなスクリプトが生成されます。

codepoints = [10, 9, 34, 75, 111, 114, 101, 97, 110, 3]
i = 0
len = SizeOf(codepoints)
while (i < len)
    SelectMore(codepoints[i], codepoints[i]) // グリフを追加選択
    ++i
endloop
SelectInvert() // 選択範囲を反転
Clear() // 選択中のグリフを削除

結果

私のプロジェクトでは、20MBあったフォントを120KB程度まで削減することができました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした