39 个发布版本
0.6.0-beta.8 | 2024 年 6 月 20 日 |
---|---|
0.6.0-beta.4 | 2024 年 5 月 31 日 |
0.4.6 | 2024 年 1 月 10 日 |
0.4.5 | 2023 年 9 月 20 日 |
0.2.0-beta.4 | 2022 年 7 月 6 日 |
#660 in 文本处理
每月 100 次下载
用于 3 个 crates (通过 lottie)
3.5MB
5.5K SLoC
fontkit-rs
用于加载、匹配、测量和渲染文本的工具包。
注意:此项目仍在进行中。文本测量和定位是一个复杂的话题。选择一个更成熟的库是明智的选择。
安装
npm i fontkit-rs
编译模块
npm run build
npm run build:wasi
node examples/node.mjs
构建 WASI
rustup target add wasm32-wasi
npm run build:wasi
字体查询
此模块使用特殊的字体匹配逻辑。字体的身份包含字体族(名称)、粗细、斜体和拉伸(字体宽度)。在查询时,允许提及信息的任何子集,但字体族是必需的。
然后,查询被拆分为 4 个过滤器,顺序为 family -> weight -> italic -> stretch。每个过滤器都可以筛选结果集,并且
- 如果在任何过滤器之后结果中只有一个字体,则立即返回。
- 如果在所有过滤器之后,剩下 0 个或多个字体,则查询失败
通用 API (WASM API)
new FontKit()
创建一个新的字体注册表
fontkit.add_font_from_buffer(buffer:Uint8Array) ->FontKey
从缓冲区添加字体,返回此字体的标准键
fontkit.query(key:FontKey) ->Font|undefined
查询字体
font.has_glyph(c: char) ->boolean
检查字体是否包含给定字符的符号
font.ascender() ->number
字体的上伸度量
font.descender() ->number
字体的下伸度量
font.units_per_em() ->number
此字体度量的单位
font.glyph_path(c: char) ->GlyphPath|undefined
获取字符的符号路径,如果有
glyphPath.scale(scaleFactor:number)
字体的符号非常大(以 units_per_em
的单位),该方法可以缩放路径以方便使用
glyphPath.translate(x:number,y:number)
平移路径
glyphPath.to_string() ->string
将符号路径导出为 SVG 路径字符串
Node.js 支持
目前此模块通过 WASI
API 支持 Node.js。这需要 --experimental-wasi-unstable-preview1
标志,并且仅提供有限的 API。
示例
import { dirname } from 'path';
import { fileURLToPath } from 'url';
// Import the Node.js specific entry module
import { FontKitIndex } from '../node.js';
// Get current path, or you could use any path containing font files
const __dirname = dirname(fileURLToPath(import.meta.url));
// Create an instance of `FontKitIndex`, which is generally a font registry.
// By doing this, an object is created in Rust. So be sure to call `.free()`
// later
const fontkit = new FontKitIndex();
// Await here is needed as it initiate the WASM module
await fontkit.initiate();
// Add a search path, fonts are recursively indexed. This method could
// be called multiple times
fontkit.addSearchPath(__dirname);
// Query a font, additional params including weight, stretch, italic are supported
const font = fontkit.font('Open Sans');
// Get the actual path of the font
console.log(font.path());
// Free the memory of the registry
fontkit.free();
作为最小化的API,获取字体实际路径后,可以将文件加载到Uint8Array
缓冲区中,并使用正常的WASM
API来加载/使用字体。所以这里Node.js API的主要功能是索引和查询字体。
API
new FontKitIndex()
创建一个新的仅用于索引的字体注册表。存储它找到的字体信息(不是实际缓冲区)。
fontkitIndex.addSearchPath(path:string)
在路径中递归搜索新字体。支持ttf/otf/woff/woff2字体。字体被加载以获取其信息,然后立即释放。
fontkitIndex.query(family:string,weight?=400,italic?=false,strech?=5) ->Font|undefined
查询一个字体。详细信息请参阅查询
fontkitIndex.free()
释放注册表。后续调用将使程序崩溃
font.path() ->string
获取字体的路径
依赖
~3–11MB
~141K SLoC