Metrics

Use Font::metrics() to read a font's declared dimensions: units per em, line metrics, bounds, and embedding flags. Use glyphMetrics() for one glyph's advance and side bearing. Both return unscaled font design units.

<?php

use Alto\Font\Font;

$font = Font::fromFile(__DIR__.'/fonts/Inter-Regular.ttf');
$metrics = $font->metrics();
$scale = 1000 / $metrics->unitsPerEm;

$bounds = [
    $metrics->bounds->xMin * $scale,
    $metrics->bounds->yMin * $scale,
    $metrics->bounds->xMax * $scale,
    $metrics->bounds->yMax * $scale,
];

Validate that unitsPerEm is positive before scaling untrusted font data. FontMetrics and Geometry\BoundingBox are immutable value objects.

Values and missing information

Property Source Meaning
unitsPerEm head Units defining one em
ascender, descender, lineGap hhea Declared horizontal line metrics; descender is signed
bounds head xMin, yMin, xMax, yMax in font units
capHeight, xHeight OS/2 version 2 or newer Declared heights, or null for missing/zero values
italicAngle post Signed degrees from vertical; zero means upright
isFixedPitch post Whether the declared fixed-pitch value is nonzero
embeddingFlags OS/2.fsType Raw unsigned bit field, including any reserved bits

Absent optional tables produce null values. A zero angle, a proportional font (false), and zero embedding flags remain distinguishable from missing data. OS/2 versions 0 and 1 do not supply cap/x heights, even if trailing bytes are present. Truncated fields throw InvalidFontException when read.

Every value is the font's own declaration, read from fixed table prefixes of at most 176 bytes: bounds are the declared control-point bounds, heights come from OS/2 when it provides them, and embedding flags are the raw fsType bits for your workflow to interpret. After subsetting, read the metrics of the resulting font.

The metrics describe the default font instance. metrics() on a view selected with withVariations() throws UnsupportedFontException: instance bounds and MVAR-adjusted metrics are not implemented. withoutVariations() returns access to the original default-instance values.

Field definitions: OpenType head, OS/2, and post.

To load the font from bytes instead of a file, see Read.