Изучение атрибутов шрифта и метрик глифов

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом лабе вы узнаете о свойствах объекта .FT2Font, которые описывают общие свойства шрифта. Также вы научитесь использовать индивидуальные метрики символов с помощью объекта .Glyph, возвращаемого методом .load_char.

Советы по работе с ВМ

После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы приступить к практике в Jupyter Notebook.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем необходимые библиотеки

В этом шаге мы импортируем необходимые библиотеки.

import os
import matplotlib
import matplotlib.ft2font as ft

Загружаем шрифт

В этом шаге мы загружаем шрифт, с которым будем работать. Мы будем использовать шрифт, поставляемый вместе с Matplotlib.

font = ft.FT2Font(
    os.path.join(matplotlib.get_data_path(),
                 'fonts/ttf/DejaVuSans-Oblique.ttf'))

Выводим свойства шрифта

В этом шаге мы выведем свойства шрифта.

print('Num faces:  ', font.num_faces)        ## количество лиц в файле
print('Num glyphs: ', font.num_glyphs)       ## количество глифов в лице
print('Family name:', font.family_name)      ## имя семейства лица
print('Style name: ', font.style_name)       ## имя стиля лица
print('PS name:    ', font.postscript_name)  ## постскрипт имя
print('Num fixed:  ', font.num_fixed_sizes)  ## количество встроенных битмапов

Выводим дополнительные свойства шрифта

В этом шаге мы выведем дополнительные свойства шрифта, доступные только для масштабируемых лиц.

if font.scalable:
    ## глобальная ограничивающая рамка лица (xmin, ymin, xmax, ymax)
    print('Bbox:               ', font.bbox)
    ## количество единиц шрифта, охваченных EM
    print('EM:                 ', font.units_per_EM)
    ## подъем в 26,6 единицах
    print('Ascender:           ', font.ascender)
    ## опускание в 26,6 единицах
    print('Descender:          ', font.descender)
    ## высота в 26,6 единицах
    print('Height:             ', font.height)
    ## максимальный горизонтальный сдвиг курсора
    print('Max adv width:      ', font.max_advance_width)
    ## то же для вертикального расположения
    print('Max adv height:     ', font.max_advance_height)
    ## вертикальное положение подчеркивания
    print('Underline pos:      ', font.underline_position)
    ## вертикальная толщина подчеркивания
    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)))

Резюме

В этом практическом занятии вы узнали о свойствах объекта .FT2Font, которые описывают общие свойства шрифта. Также вы узнали, как использовать метрики отдельных символов с помощью объекта .Glyph, возвращаемого методом .load_char.