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.
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.
composer require alto/fontRequires 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.
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.
| 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.
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.
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 qaChanges to public behavior should include tests and documentation.
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.
ALTO Font is released by ALTO PHP under the MIT License.