#text #ttf #truetype #otf #opentype

ab_glyph

API for loading, scaling, positioning and rasterizing OpenType font glyphs

14 releases

0.2.11 May 27, 2021
0.2.10 Feb 20, 2021
0.2.8 Jan 21, 2021
0.2.7 Dec 10, 2020
0.2.5 Jul 24, 2020

#122 in Text processing

Download history 7176/week @ 2021-06-01 6187/week @ 2021-06-08 6462/week @ 2021-06-15 7968/week @ 2021-06-22 8642/week @ 2021-06-29 7101/week @ 2021-07-06 8683/week @ 2021-07-13 8861/week @ 2021-07-20 9217/week @ 2021-07-27 7983/week @ 2021-08-03 9370/week @ 2021-08-10 9043/week @ 2021-08-17 11693/week @ 2021-08-24 11081/week @ 2021-08-31 11874/week @ 2021-09-07 13324/week @ 2021-09-14

23,112 downloads per month
Used in 165 crates (11 directly)

Apache-2.0

67KB
1K SLoC

ab_glyph crates.io Documentation

Fast API for loading, scaling, positioning and rasterizing OpenType font glyphs.

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

no_std environments are supported using alloc & libm.

ab_glyph = { default-features = false, features = ["libm"] }

Comparison with rusttype

ab_glyph is a rewrite of rusttype made after I added .otf support for the latter and saw some performance issue's with the rusttype API.

ab_glyph is a more focussed API concentrating on high performance for both .ttf & .otf fonts.

When laying out glyphs into paragraph, ab_glyph is faster than rusttype using .ttf fonts & much faster for .otf fonts.

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

Dependencies

~535KB
~13K SLoC