如何从WOFF中删除字形?

Chr*_*isD 5 javascript fonts svg woff

是否有任何可以将WOFF(和WOFF2)字体缩小为仅SVG图像中使用的字形的JavaScript库?例如,给定一个字体和一个字符串数组,它将返回显示这些字符串所需的最小字体。

我首先想到的是使用SVG字体,它相对简单,但不幸的是,大多数浏览器都不支持它们。WOFF和WOFF2得到了很好的支持,并且正在成为标准,但是到目前为止,我还没有找到适合我需要的库的任何运气。

Qui*_*ney 0

您正在寻找的是字体子集。它将返回一个新的字体文件给您,其中仅包含所需的字符和字距调整对。这可以使用subset-font快速完成。

// npm i subset-font
const subsetFont = require('subset-font');

const mySfntFontBuffer = Buffer.from(/*...*/);

// Create a new font with only the characters required to render "Hello, world!" in WOFF2 format:
const subsetBuffer = await subsetFont(mySfntFontBuffer, 'Hello, world!', {
  targetFormat: 'woff2',
});
Run Code Online (Sandbox Code Playgroud)

话虽如此,存在更强大/灵活的库,例如fontkit。如果您正在寻找更复杂的编辑,您可能需要这个。

// npm install fontkit
var fontkit = require('fontkit');

// open a font synchronously
var font = fontkit.openSync('font.ttf');

// layout a string, using default shaping features.
// returns a GlyphRun, describing glyphs and positions.
var run = font.layout('hello world!');

// create a font subset
var subset = font.createSubset();
run.glyphs.forEach(function(glyph) {
  subset.includeGlyph(glyph);
});

let buffer = subset.encode();
Run Code Online (Sandbox Code Playgroud)