Оптимизация количества глифов шрифта для применения в web
Необходимые пакеты apt install fontforge и pip install fonttools.
Определимся с необходимыми глифами, нужна латиница, кириллица, спецсимволы, включая некоторые символы греческого (ΣΩαβγμ), аналоги греческого, схожие в начертании, но имеющие другие коды (∆∑µ), и ещё немного, которые могут где-нибудь использоваться в тексте или как элементы заменяющие графику (♪♫♬).
Почему несколько вариантов глифов с разными кодами?
Потому что символ µ (mu U+00b5) и греческая буква μ (mu U+03bc) в расширенных шрифтах могут иметь свой глиф с разным начертанием, или наоборот, общий глиф, где схожие символы по начертанию ссылаются на один глиф. Или, например, греческая Σ (Sigma U+03a3) не то же самое, что символ ∑ (summation U+2211).
Но, возможно, у вас на экране эти символы выглядят одинаково.
Вариант с подготовленными наборами символов в unicode
nano make_menu.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | |
nano ff-conv.sh
На данном сайте используется латиница, но не со всеми символами, например диакритическими, а ещё кириллица, и некоторые специальные символы.
Символьное представление юникод-символов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
Генерируем шрифты
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Оригинальный шрифт PTSansNarrowRegular_original.ttf 230K
Некоторые шрифты могут использовать один глиф для определённых сочетаний символов,
для латиницы это часто комбинации fi fl ff ft.
Часто веб сервисы генерации шрифтов убирают эти глифы.
Если у вас такая проблема, её можно решить просто добавив CSS правило
letter-spacing:-0.1pt;
font-glyph-fl-fi-ft.png
font-fl-fi-ft-errore.png
Вариант с выбором кодов вручную
Открываем .ttf в fontforge и начинаем выбирать и копировать нужные числовые коды глифов в файл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
pyftsubset PTSansNarrow-Regular.ttf --output-file=PTSans-sub.ttf --text-file=glyph-symbols
Универсальный css стиль для шрифта и fallback с корректировкой размеров
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
И ещё немножко
Считаем количество глифов в оригинальном файле и сделанном самостоятельно.
1 2 3 4 5 6 7 8 9 10 11 | |
Для svg это можно сделать например так:
cat PTSansNarrow.svg | grep "glyph-name" | wc -l
723
cat PTSansNarrow_subset.svg | grep "glyph-name" | wc -l
292
Нужно отметить, что глифов в полученных шрифтах может быть меньше, чем символов для выборки, потому что в конкретном шрифте может не быть глифов для некоторых символов, скрипт содержит расширенный набор символов (кодов) для выборки из разных шрифтов, но главное, что он не содержит не нужных символов. Однако, всё же более правильно будет открывать конкретный шрифт в редакторе и выбирать нужные из имеющихся глифов.
Если планируется использовать шрифт только для текста, который иногда даже не предполагает дополнительных символов к alphanumeric, кроме точки и запятой, то количество глифов можно сократить ещё больше.
1 2 3 4 5 6 7 8 9 | |