alto / font
Font file loading and discovery, font data inspection, format conversion, WOFF2 compression, and Unicode subsetting.
Fund package maintenance!
Requires
- php: >=8.4
- ext-zlib: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.68
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^12
Suggests
- ext-brotli: Decompresses WOFF2 font data without shelling out to the brotli binary.
- brotli: Provides Brotli decompression for WOFF2 when ext-brotli is not installed.
Provides
None
Conflicts
None
Replaces
None
README
Inspect, convert, and subset font files from PHP. Read a font's family and style, find a matching face, or keep only the characters your application uses.
Installation
composer require alto/font
Requires PHP 8.4+, Iconv, and Zlib. Reading WOFF2 also needs the Brotli PHP extension or executable; writing WOFF2 requires an explicit compressor. TTF and WOFF examples need no Brotli dependency.
Read a font
Save this as inspect.php, place your font at fonts/Inter-Regular.ttf,
and run php inspect.php:
<?php require __DIR__.'/vendor/autoload.php'; use Alto\Font\Font; $font = Font::fromFile(__DIR__.'/fonts/Inter-Regular.ttf'); printf("%s %s\n", $font->metadata()->family, $font->metadata()->subfamily);
For Inter Regular, this prints Inter Regular. See
Getting started to check which characters it contains.
Create a smaller font for your text
Create an output directory first. Run this as a separate script beside your
vendor directory. The destination must not already exist.
<?php require __DIR__.'/vendor/autoload.php'; use Alto\Font\Font; use Alto\Font\Subset\SubsetOptions; use Alto\Font\Subset\UnicodeSet; use Alto\Font\Writer\WoffWriter; $font = Font::fromFile(__DIR__.'/fonts/Inter-Regular.ttf'); $result = $font->subset(new SubsetOptions( UnicodeSet::fromText('ALTO Font 0123456789'), )); $destination = __DIR__.'/output/inter-subset.woff'; new WoffWriter()->write($result->font, $destination); printf("Saved inter-subset.woff (%d bytes)\n", filesize($destination));
This creates a WOFF file containing the requested characters available in the source, plus required glyph dependencies. The original file is unchanged. Use the full text your application needs: later text may contain characters excluded from this subset. Read Create a subset for missing-character checks, output sizes, and options.
The illustrated subset uses the text above and default options. The exact size depends on the source font and the selected characters.
Choose a task
| I want to... | Guide |
|---|---|
| Understand files, faces, characters, and glyphs | Font concepts |
| Read a font's family, style, or license fields | Read metadata |
| Check whether a font contains my characters | Getting started |
| Inspect files, metadata, glyphs, and variations | Inspect fonts |
| Convert a font to TTF, WOFF, or WOFF2 | Convert a font |
| Reduce a font to the text I use | Create a subset |
| Find a font by family, weight, and style | Find a font |
| Inspect variable-font axes and glyph measurements | Variable fonts |
| Check supported containers and outline formats | Font formats |
The documentation index lists every main guide.
Supported fonts
ALTO Font supports TrueType outlines in TTF/OpenType, WOFF, and WOFF2 files, and individual faces from TTC/OTC collections. CFF/CFF2 outlines, color glyphs, and WOFF2 collections are unsupported. See Formats for operation-specific limits.
Variable fonts can retain their axes during conversion and subsetting. Exporting a fixed weight from a variable font is not supported. ALTO Font reads and transforms font data; text shaping and rendering are handled by the application or browser using the output.
Contributing
Contributions of all kinds are welcome. Visit the project on GitHub to report a bug, suggest a feature, or open a pull request.
Before submitting code, run:
# Runs PHP CS Fixer, PHPStan, and PHPUnit
composer qa
Changes to public behavior should include tests and documentation.
Support
ALTO Font is open source and independently maintained by Simon André. If it is useful to your work, you can support its continued development through GitHub Sponsors.
Sharing the package or starring it on GitHub also helps.
License
ALTO Font is released by ALTO PHP under the MIT License.