Note
Go to the end to download the full example code
Font properties#
This example lists the attributes of an FT2Font
object, which describe
global font properties. For individual character metrics, use the Glyph
object, as returned by load_char
.
Num faces: 1
Num glyphs: 5343
Family name: DejaVu Sans
Style name: Oblique
PS name: DejaVuSans-Oblique
Num fixed: 0
Bbox: (-2080, -717, 3398, 2187)
EM: 2048
Ascender: 1901
Descender: -483
Height: 2384
Max adv width: 3461
Max adv height: 2384
Underline pos: -175
Underline thickness: 90
Italic: True
Bold: False
Scalable: True
Fixed sizes: False
Fixed width: False
SFNT: False
Horizontal: False
Vertical: False
Kerning: False
Fast glyphs: False
Multiple masters: False
Glyph names: False
External stream: False
import os
import matplotlib
import matplotlib.ft2font as ft
font = ft.FT2Font(
# Use a font shipped with Matplotlib.
os.path.join(matplotlib.get_data_path(),
'fonts/ttf/DejaVuSans-Oblique.ttf'))
print('Num faces: ', font.num_faces) # number of faces in file
print('Num glyphs: ', font.num_glyphs) # number of glyphs in the face
print('Family name:', font.family_name) # face family name
print('Style name: ', font.style_name) # face style name
print('PS name: ', font.postscript_name) # the postscript name
print('Num fixed: ', font.num_fixed_sizes) # number of embedded bitmaps
# the following are only available if face.scalable
if font.scalable:
# the face global bounding box (xmin, ymin, xmax, ymax)
print('Bbox: ', font.bbox)
# number of font units covered by the EM
print('EM: ', font.units_per_EM)
# the ascender in 26.6 units
print('Ascender: ', font.ascender)
# the descender in 26.6 units
print('Descender: ', font.descender)
# the height in 26.6 units
print('Height: ', font.height)
# maximum horizontal cursor advance
print('Max adv width: ', font.max_advance_width)
# same for vertical layout
print('Max adv height: ', font.max_advance_height)
# vertical position of the underline bar
print('Underline pos: ', font.underline_position)
# vertical thickness of the underline
print('Underline thickness:', font.underline_thickness)
for style in ('Italic',
'Bold',
'Scalable',
'Fixed sizes',
'Fixed width',
'SFNT',
'Horizontal',
'Vertical',
'Kerning',
'Fast glyphs',
'Multiple masters',
'Glyph names',
'External stream'):
bitpos = getattr(ft, style.replace(' ', '_').upper()) - 1
print(f"{style+':':17}", bool(font.style_flags & (1 << bitpos)))