Un analizador de fuentes seguro, de alto nivel y sin asignación para TrueType, OpenType y AAT.
Se puede utilizar como biblioteca Rust o C.
no_std
/WASM.Es muy difícil comparar diferentes bibliotecas, por lo que utilizamos la comparación basada en tablas. Existen aproximadamente tres tipos de tablas TrueType:
head
, OS/2
, etc.).glyf
, CFF
(un poco), hmtx
, etc.).cmap
, kern
, GPOS
, etc.).Función/Biblioteca | analizador-ttf | Tipo libre | stb_truetype |
---|---|---|---|
Memoria segura | ✓ | ||
Hilo seguro | ✓ | ~ (principalmente reentrante) | |
Asignación cero | ✓ | ||
Fuentes variables | ✓ | ✓ | |
Representación | - 1 | ✓ | ~ (muy primitivo) |
mesa ankr | ✓ | ||
tabla avar | ✓ | ✓ | |
tabla bdat | ~ (nº 4) | ✓ | |
mesa bloc | ✓ | ✓ | |
tabla CBDT | ~ (nº 8, 9) | ✓ | |
tabla CBLC | ✓ | ✓ | |
tabla COLR | ✓ | ✓ | |
tabla CPAL | ✓ | ✓ | |
tabla CFF | ✓ | ✓ | ~ (sin soporte seac ) |
tabla CFF2 | ✓ | ✓ | |
tabla cmap | ~ (nº 8) | ✓ | ~ (no 2,8,10,14; solo Unicode) |
tabla EBDT | ~ (nº 8, 9) | ✓ | |
tabla EBLC | ✓ | ✓ | |
tabla feat | ✓ | ||
tabla fvar | ✓ | ✓ | |
mesa gasp | ✓ | ||
tabla GDEF | ~ | ||
mesa glyf | ~ 2 | ✓ | ~ 2 |
tabla GPOS | ✓ | ~ (sólo 2) | |
tabla GSUB | ✓ | ||
tabla gvar | ✓ | ✓ | |
mesa head | ✓ | ✓ | ✓ |
hhea mesa | ✓ | ✓ | ✓ |
tabla hmtx | ✓ | ✓ | ✓ |
tabla HVAR | ✓ | ✓ | |
mesa kern | ✓ | ~ (sólo 0) | ~ (sólo 0) |
mesa kerx | ✓ | ||
tabla de MATH | ✓ | ||
tabla maxp | ✓ | ✓ | ✓ |
mesa morx | ✓ | ||
tabla MVAR | ✓ | ✓ | |
tabla name | ✓ | ✓ | |
tabla OS/2 | ✓ | ✓ | |
mesa post | ✓ | ✓ | |
mesa sbix | ~ (solo PNG) | ~ (solo PNG) | |
tabla de STAT | ✓ | ||
tabla SVG | ✓ | ✓ | ✓ |
mesa trak | ✓ | ||
tabla vhea | ✓ | ✓ | |
tabla vmtx | ✓ | ✓ | |
mesa VORG | ✓ | ✓ | |
tabla VVAR | ✓ | ✓ | |
Idioma | API de óxido + C | do | do |
Versión probada | 0.17.0 | 2.12.0 | 1.24 |
Licencia | MIT/Apache-2.0 | FTL/GPLv2 | dominio publico |
Leyenda:
Notas:
ttf-parser
no admite el renderizado por sí solo, existen varias bibliotecas de renderizado además: rusttype, ab-glifo y fontdue.Las fuentes TrueType están diseñadas para consultas rápidas, por lo que la mayoría de los métodos son muy rápidos. La principal excepción es el contorno de glifos. Los glifos se pueden almacenar usando dos métodos diferentes: usando el formato de datos de glifo y el formato de fuente compacto (pdf). El primero es bastante simple, lo que hace que su procesamiento sea más rápido. El segundo es básicamente un lenguaje pequeño con una máquina virtual basada en pila, lo que lo hace mucho más difícil de procesar.
El punto de referencia prueba cuánto tiempo lleva delinear todos los glifos en una fuente.
x86 (AMD 3700X)
Mesa/Biblioteca | analizador-ttf | Tipo libre | stb_truetype |
---|---|---|---|
glyf | 0.901 ms | 1.171 ms | 0.675 ms |
gvar | 2.972 ms | 4.132 ms | - |
CFF | 1.197 ms | 5.647 ms | 2.813 ms |
CFF2 | 1.968 ms | 6.392 ms | - |
BRAZO (Apple M1)
Mesa/Biblioteca | analizador-ttf | Tipo libre | stb_truetype |
---|---|---|---|
glyf | 0.550 ms | 0.854 ms | 0.703 ms |
gvar | 2.270 ms | 4.594 ms | - |
CFF | 1.054 ms | 5.223 ms | 3.262 ms |
CFF2 | 1.765 ms | 5.995 ms | - |
Nota: FreeType es sorprendentemente lento, por lo que me preocupa haber estropeado algo.
Y aquí hay algunos métodos de referencia:
test outline_glyph_276_from_cff2 ... bench: 867 ns/iter (+/- 15)
test from_data_otf_cff ... bench: 968 ns/iter (+/- 13)
test from_data_otf_cff2 ... bench: 887 ns/iter (+/- 25)
test outline_glyph_276_from_cff ... bench: 678 ns/iter (+/- 41)
test outline_glyph_276_from_glyf ... bench: 649 ns/iter (+/- 11)
test outline_glyph_8_from_cff2 ... bench: 534 ns/iter (+/- 14)
test from_data_ttf ... bench: 467 ns/iter (+/- 11)
test glyph_name_post_276 ... bench: 223 ns/iter (+/- 5)
test outline_glyph_8_from_cff ... bench: 315 ns/iter (+/- 13)
test outline_glyph_8_from_glyf ... bench: 291 ns/iter (+/- 5)
test family_name ... bench: 183 ns/iter (+/- 102)
test glyph_name_cff_276 ... bench: 62 ns/iter (+/- 1)
test glyph_index_u41 ... bench: 16 ns/iter (+/- 0)
test glyph_name_cff_8 ... bench: 5 ns/iter (+/- 0)
test glyph_name_post_8 ... bench: 2 ns/iter (+/- 0)
test subscript_metrics ... bench: 2 ns/iter (+/- 0)
test glyph_hor_advance ... bench: 2 ns/iter (+/- 0)
test glyph_hor_side_bearing ... bench: 2 ns/iter (+/- 0)
test glyph_name_8 ... bench: 1 ns/iter (+/- 0)
test ascender ... bench: 1 ns/iter (+/- 0)
test underline_metrics ... bench: 1 ns/iter (+/- 0)
test strikeout_metrics ... bench: 1 ns/iter (+/- 0)
test x_height ... bench: 1 ns/iter (+/- 0)
test units_per_em ... bench: 0.5 ns/iter (+/- 0)
test width ... bench: 0.2 ns/iter (+/- 0)
Con licencia bajo cualquiera de
a tu elección.
A menos que indique explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión en el trabajo, tal como se define en la licencia Apache-2.0, tendrá una licencia doble como se indicó anteriormente, sin términos ni condiciones adicionales.