31 个版本
0.2.28 | 2024 年 7 月 4 日 |
---|---|
0.2.26 | 2024 年 5 月 10 日 |
0.2.23 | 2023 年 10 月 30 日 |
0.2.21 | 2023 年 4 月 21 日 |
0.2.5 | 2020 年 7 月 24 日 |
#62 在 图像
416,600 每月下载量
用于 1,131 个crate (47 直接)
88KB
1.5K SLoC
ab_glyph
快速加载、缩放、定位和光栅化 OpenType 字体符号的 API。
use ab_glyph::{FontRef, Font, Glyph, point};
let font = FontRef::try_from_slice(include_bytes!("../../dev/fonts/Exo2-Light.otf"))?;
// Get a glyph for 'q' with a scale & position.
let q_glyph: Glyph = font.glyph_id('q').with_scale_and_position(24.0, point(100.0, 0.0));
// Draw it.
if let Some(q) = font.outline_glyph(q_glyph) {
q.draw(|x, y, c| { /* draw pixel `(x, y)` with coverage: `c` */ });
}
no_std
使用 alloc
和 libm
支持 no_std 环境。
ab_glyph = { default-features = false, features = ["libm"] }
与 rusttype
的比较
在为 rusttype 添加 .otf 支持后,我看到了 rusttype API 中的一些性能问题,因此重新编写了 ab_glyph。
ab_glyph 是一个更专注于高性能的 API,针对 .ttf 和 .otf 字体。
当将符号布局到段落中时,ab_glyph 使用 .ttf 字体比 rusttype 快,对于 .otf 字体则快得多。
group ab-glyph rusttype 0.9
----- -------- ------------
layout_a_sentence (exo2-ttf) 1.00 11.1±0.08µs 1.56 17.3±0.14µs
layout_a_sentence (exo2-otf) 1.00 11.1±0.12µs 8.85 98.1±1.17µs
注意:以下数据来自 2020 年 5 月的基准测试,ab-glyph 的性能自那时以来也有望得到提升.
依赖项
~1MB
~20K SLoC