フォントのサブセット化
Font Subsetter
TrueTypeフォントを実際に使う字だけに削ぎ落としてWOFFにも包む、日本語ウェブフォントで数MBと数十KBを分ける作業です。
TrueTypeのフォントを、ページが実際に使う文字だけに切り詰め、残ったものから正しいファイルを組み直します。韓国語ではこれが数メガバイトのダウンロードと数百キロバイトの差になります。ハングルを完全に収録したフォントは11,172の音節を持ち、1ページが使うのは数百だからです。TTFと並べてWOFFも出せますし、渡す前に自分の出力を読み直して確かめます。
TTF ファイルを置いてください
TrueType 輪郭のフォントだけです(.ttf、または glyf テーブルのある .otf)。すべてこのタブの中で行います。
どう切るか
- · 指定した文字のグリフと、それが参照する部品グリフ(合成グリフの閉包)を残したうえで
glyf·loca·hmtx·hhea·maxp·cmap(形式 4 と 12)とpostを書き直します。テーブルのチェックサムとhead.checkSumAdjustmentも計算し直します。 - · 出来上がったファイルは同じパーサーで読み直し、通ったものだけを渡します。ヒンティングのプログラム(
fpgm·prep·cvt)はそのままです。 - · 入れ忘れた文字は、その場所が空の箱になります。ページの実際の文章を貼るか、韓国語なら KS X 1001 の 2,350 音節を有効にしてください。
先にフォントを見るならフォント情報ビューアー、形式だけ変えるならフォント形式変換があります。
使い方
TrueTypeのファイルを置きます
`.ttf`か、中身がTrueTypeのアウトラインである`.otf`です。CFFのフォントはここではサブセット化できないので、開いた時点でどちらの種類かをパネルが示します。
ページで使う文章を貼り付けます
実際の文言をコピーしてください。見出し、ラベル、ボタンの文字、エラーメッセージです。重複は自動的にまとめられます。入れ忘れた文字は最終的なページで空の箱として描かれるので、多めに入れるほうに寄せてください。
自分の文章と標準の集合のどちらにするか決めます
ここが本当の決定です。自分の文章だけを貼れば最小のファイルになりますが、誰かが入力欄に名前を打ち込んだ瞬間に崩れます。KS X 1001の2,350音節を有効にすればファイルは大きくなりますが、任意の韓国語の入力に耐えます。固定のマーケティング文言なら前者、利用者の書いたものが入るなら後者です。
生成して数字を読みます
前後のグリフ数、前後のバイト数、削減率です。指定した文字がフォントにない場合は、黙って落とすのではなく一覧に出します。
ファイルと、その横の@font-faceを取ります
宣言のウェイトとイタリックの指定は、フォント自身のOS/2とpostのテーブルから読んだものなので、推測ではなくファイルに一致します。
よくある質問
OTFが受け付けられません。なぜですか。
そのファイルがCFF(PostScript)のアウトラインを持っているからです。それをサブセット化するには別のアウトライン形式のチャーストリングを書き直すことになり、ここでやっているTrueTypeの`glyf`レコードを切る処理とは別のプログラムです。壊れたファイルを作る代わりに、ページはそう伝えます。デスクトップでfonttoolsのpyftsubsetを使ってください。フォント情報ビューアーはそのまま使えます。
カーニングと合字は残りますか。
残りません。`GPOS`と`GSUB`は落とし、落としたときはページがそれを一覧に出します。欧文なら、サブセットにカーニングのペアも合字も残らないということです。韓国語ではめったに問題になりません。ハングルの合成はグリフそのものの中にあるからです。カーニングが効いていないと困るなら、それらのテーブルを書き直せるfonttoolsでサブセット化してください。
可変フォントはどうなりますか。
既定のインスタンスとして出てきます。可変のテーブルは引き継がれません。サブセットは作業用のファイルではなく配布物なので、たいていはそれで問題ありません。ただし、ある軸に頼っていたのなら、実際に使う静的なインスタンスをサブセット化してください。
WOFF2は作れますか。
作れません。WOFF2にはBrotliが要り、ブラウザはページにそれを渡しません。WOFFは作れて、`CompressionStream("deflate")`で生成します。TTFからさらに40〜50%ほど減るのがふつうです。WOFF2ならそこからさらに20〜30%ほど減りますが、それにはデスクトップの道具が要ります。
一部の文字が空の箱になりました。
サブセットを作ったときの文字一覧に、その文字が入っていなかったからです。それがサブセット化の取引そのもので、ファイルには指定したものしか入りません。足りない文字を加えて作り直すか、KS X 1001の集合を有効にして、任意の韓国語の入力にも受け皿があるようにしてください。
ここから渡せます
フォントの組み合わせ提案
Font Pairing
システムフォントスタックから見出し用と本文用の組み合わせを提案し、韓国語か英語のサンプルで見比べてからCSSを渡します。和文の見本はありません。
フォント情報ビューアー
Font Inspector
フォントファイルを開いて、ブロック別の収録グリフ・ハングル音節数・ウェイト・可変軸・埋め込み許可・ライセンス名レコードを表示します。
フォント形式変換
Font Converter
TTF・OTFとWOFFをブラウザ内で相互に変換して@font-face規則まで書き出します(WOFF2はBrotliが要るため扱わず、デスクトップの道具を案内します)。
カラーピッカー
Colour Picker
OKLCHの色域から、画面のスポイトで、またはアップロードした画像から色を選び、好きな表記でコピーします。
次の一手
このツールが出したものをそのまま受け取れる道具です。
CSS整形・圧縮
CSS Beautifier & Minifier
並べ替えを一切せずにCSSを整形または圧縮し、トークンの並びをそのまま保ちます。
フォント形式変換
Font Converter
TTF・OTFとWOFFをブラウザ内で相互に変換して@font-face規則まで書き出します(WOFF2はBrotliが要るため扱わず、デスクトップの道具を案内します)。
フォント情報ビューアー
Font Inspector
フォントファイルを開いて、ブロック別の収録グリフ・ハングル音節数・ウェイト・可変軸・埋め込み許可・ライセンス名レコードを表示します。
韓国語の文字数カウント
Korean Character Counter
空白を含む場合と含まない場合の文字数とバイト数を、韓国の応募書類の様式が数えるのと同じやり方で数えます。
音声形式変換
Audio Converter
MP3・WAV・FLAC・AAC・OGG・Opusのあいだを、ビットレートとサンプリング周波数を決めて変換します。
動画から音声を抽出
Extract Audio from Video
動画の音声トラックをMP3・WAV・M4A・FLACで取り出すか、再エンコードせずそのまま複写します。