fontTools.subset
でウェブフォント
fontTools.subset
でウェブフォントfontTools.subset
fontTools.subset
pyftsubset
コマンドもありますが、スクリプトを書きました。
from fontTools.subset import Options, load_font, Subsetter, save_font
subset_options = Options(**_subset_options)
font = load_font("path/to/font_file", subset_options)
subsetter = Subsetter(subset_options)
subsetter.subset(font)
save_font(font, "path/to/outfile", subset_options)
Options
Options
Subsetter.populate
を使っています。
subset_options = Options(
flavor="woff2",
with_zopfli=True,
layout_features=["*"],
hinting=False,
drop_tables=[],
name_IDs=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],
)
flavor
、with_zopfli
flavor
、with_zopfli
flavor
を指定しなければ、単にサブセット化します。いわゆるウェブフォント形式(WOFF、WOFF2)には変換されません。
layout_features
layout_features
hinting
hinting
drop_tables
drop_tables
name_IDs
name_IDs
load_font
load_font
fontTools.ttLib.ttFont.TTFont
オブジェクトとして扱われます。
Subsetter
Subsetter
fontTools.ttLib.ttFont.TTFont.getBestCmap
などですべてのグリフを取得しておいて、分割しています。
subsetter = Subsetter(subset_options)
codepoints = []
for codepoint in font.getBestCmap().keys():
codepoints.append(codepoint)
from copy import deepcopy
n = 47
while 0 < len(codepoints):
subset_unicode = codepoints[0:n]
codepoints[0:n] = []
subsetter_copy = deepcopy(subsetter)
subsetter_copy.populate(unicode=subset_unicode)
font_copy = deepcopy(font)
subsetter_copy.subset(font_copy)
populate
populate
subset
subset
save_font
save_font
unicode-range
unicode-range
/* ASCIIが使われるときにだけ読み込まれるフォント */
@font-face {
font-family: "My Font";
font-weight: 100 900;
src: url(MyFont.1.woff2) format("woff2");
unicode-range: U+20-7f;
}
/* unicode-range未指定と大差ないフォント */
@font-face {
font-family: "My Font";
font-weight: 100 900;
src: url(MyFont.2.woff2) format("woff2");
unicode-range: U+0-1f0000;
}