Skip to content

字体压缩

🕒 Published at:

字体压缩指南

通常的字体格式(如 TTF、OTF)体积较大,为了优化网页性能,可以将其转换为更小体积的字体文件格式(WOFF2)。字体压缩主要分为两步:取子集和压缩。

安装 fonttools

首先,我们需要安装 Python 的 fonttools 库。使用最新版 Python 的 pip 命令安装:

sh
$ pip install fonttools

取子集

中文汉字数量很多,以思源宋体为例,包含 8105 个规范字。常用汉字数量大约为 3500 个,如果文本相对固定,可以删减掉其他不常用的汉字。更极端的方法是只保留文本中出现的字符,其他全部删除。不过,建议折中保留 3500 个汉字,以便未来修改文本时不必重新压缩字体。

这种删减字符的方法称为“取子集”。我们需要定义一个纯文本文件,里面包含所有要保留的字符。例如,可以使用“现代汉语常用 3500 字.txt”。

取子集命令

使用以下命令对字体文件取子集:

sh
$ fonttools subset "$input_file" --text-file="$text_file" --output-file="$output_file"
  • $input_file:输入的字体文件。
  • $text_file:定义保留字符的纯文本文件路径。
  • $output_file:输出的字体文件路径。

示例:对思源宋体取完子集后,文件体积从 25.4MB 减少到 2.5MB。

压缩

取完子集后,需要将字体文件压缩成 WOFF2 格式。

压缩命令

使用以下命令进行压缩:

sh
$ fonttools ttLib.woff2 compress "$input_file" -o "$output_file"
  • $input_file:输入的字体文件。
  • $output_file:输出的字体文件路径。

示例:对取完子集的字体进行压缩后,体积从 2.5MB 减少到 1.9MB,减少了约 70%。

总结

通过取子集和压缩两步,可以显著减少字体文件的体积,提高网页加载速度和性能。以下是完整的命令示例:

sh
# 安装 fonttools
$ pip install fonttools

# 取子集
$ fonttools subset "input_font.ttf" --text-file="3500_characters.txt" --output-file="subset_font.ttf"

# 压缩成 WOFF2 格式
$ fonttools ttLib.woff2 compress "subset_font.ttf" -o "compressed_font.woff2"

这样处理后的字体文件可以大大减少网页的加载时间,提升用户体验。