voderl / font-slice

slice chinese fonts into small slices
MIT License
61 stars 3 forks source link

[功能建议] 允许除外英文数字及相关标点符号 #1

Closed TNGD-YQ closed 1 year ago

TNGD-YQ commented 1 year ago

这是一个很棒的项目,感谢您的分享。

我希望可以仅仅包含中文字体的切割生成,英文以及数字字符将使用 Google 的 Roboto 字体,目前来看我只能 fork 你的项目然后修改 google-font-unicode-range.json。

voderl commented 1 year ago

一般这种情况可以提取一下 Roboto 字体的子集,只包含英文以及数字字符。然后把它放到 font-family 的最前面。 具体的提取子集方法可以参考 fontmin,ttf 字体见 https://github.com/openmaptiles/fonts/tree/master/roboto

如果希望只生成包含中文字体的切割生成,可以用下面的方法

const path = require("path");
const createFontSlice = require("font-slice");
const unicodeRanges = require("font-slice/src/google-font-unicode-range.json");

const excludeUnicodes =
  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,./;’[]`-=<>?:”{}|~!@#$%^&*()_+"
    .split("")
    .map((char) => char.charCodeAt(0));

const customUnicodeRange = unicodeRanges.map((range) => ({
  unicodes: range.unicodes.filter(
    (unicode) => !excludeUnicodes.includes(unicode)
  ),
}));

createFontSlice({
  fontPath: path.resolve(__dirname, "../assets/zpix.ttf"),
  outputDir: path.resolve(__dirname, "../output"),
  customUnicodeRange,
});
TNGD-YQ commented 1 year ago

感谢回复,这正是我需要的。谢谢您的说明。