以编程方式将webfont拆分为多个unicode范围

时间:2018-04-09 09:16:50

标签: node.js fonts gruntjs

如何将包含拉丁字符,西里尔字符和中文字符的woff2文件拆分为3个不同的文件,最好使用nodejs / grunt?

有没有办法自动确定不同集合的开始和结束点?

我已经尝试了unicode-range-splitter,但它只是将我的字体分成了相同的大块,这无助于我实现目标。

我还结合grunt-webfont-svg-extractor查看了grunt-fonts,但由于这些工具并非完全按照此要求构建,因此配置非常长且容易出错。

2 个答案:

答案 0 :(得分:1)

没有明确的开始结束分隔符,它标记了每组拉丁文,西里尔文和中文字符。

您可以指定unicode范围(即 from / to ),以区分每个集合的 begin end 块。例如,下面是一些相关的范围:

Unicode范围

┌─────────────────────────────────────────────┐
│ Name                      From     To       │
├─────────────────────────────────────────────┤
│ Basic Latin               U+0000   U+007F   │
│ Cyrillic                  U+0400   U+04FF   │
│ CJK Unified Ideographs    U+4E00   U+9FFF   │
│ ...                                         │
└─────────────────────────────────────────────┘

可以在here列出完整的unicode块/范围列表。

工具

没有特定的grunt插件,也没有nodejs解决方案来执行我所知道的字体拆分。但是有fonttools,它是用Python编写的,包含一个名为pyftsubset的命令。

以下是使用pyftsubset命令(取自this blog并略微调整)的示例

$ pyftsubset My-Awesome-Font-Regular.ttf \
    --unicodes="U+0400-04FF" \
    --layout-features="" \
    --flavor="woff" \
    --output-file="My-Awesome-Font-Cyrillic.woff"

请注意上面命令中的--unicodes选项 - 您可以在此处指定要包含的字符范围(即子集)。

可以找到pyftsubset命令的各种选项及其说明here

答案 1 :(得分:1)

使用方括号https://www.npmjs.com/package/font-ranger

使用font-ranger,您可以:

  • 为您支持的每种语言生成子集
  • 从字体中删除膨胀并针对网络进行优化
  • 将字体转换为压缩的woff2格式
  • 为较旧的浏览器提供.woff后备广告
  • 使用@ font-face规则生成CSS文件
  • 使用Node.js API自动化操作