Уменьшить шрифт (сабсеттинг): TTF, OTF, WOFF
Проверьте шрифт, оставьте нужные символы, экспортируйте TTF и WOFF.
- Мгновенно
- Бесплатно
- Приватно (обработка локально)
- Без регистрации
Сабсеттинг шрифта в браузере, без загрузки на сервер
Полный шрифт содержит тысячи глифов, а страница использует лишь малую их часть: сабсеттинг шрифта оставляет только нужные символы и сжимает результат в WOFF. Серьёзные инструменты работают из командной строки (pyftsubset из fontTools, glyphhanger) или требуют загрузить файл на сервер, что недопустимо для лицензионного шрифта.
Этот инструмент работает целиком в браузере: читает TTF, OTF, WOFF 1.0 и TTC, показывает полный инспектор (имена, лицензия, права fsType, оси вариативности, покрытие Юникода по блокам, поддерживаемые языки, функции OpenType, размер каждой таблицы), затем строит TrueType-сабсет с замыканием по компонентам и лигатурам, записывает TTF и WOFF, проверяет, что полученный шрифт загружается, и генерирует CSS @font-face с unicode-range.
-
Выберите шрифт
Перетащите файл TTF, OTF, WOFF или TTC либо нажмите «Выбрать шрифт». Для коллекции TTC выберите шрифт для извлечения. Файл WOFF2 (сигнатура wOF2) распознаётся и отклоняется с объяснением.
-
Изучите инспектор
Проверьте семейство, версию, лицензию (name ID 13) и права на встраивание fsType, оси fvar, покрытие Юникода по блокам, вероятно поддерживаемые языки и функции GSUB/GPOS. Карта глифов и поиск отвечают на вопрос «есть ли в шрифте ẞ или €?».
-
Выберите сохраняемые символы
Вставьте текст в поле «Сохраняемый текст», отметьте наборы (Основная латиница, Латиница-1, Греческий, Кириллица…) или введите диапазоны Юникода. Счётчик показывает, какие символы есть, каких нет и сколько глифов останется после замыкания.
-
Настройте режим вывода
«Сохранить функции OpenType» оставляет кернинг, лигатуры и оси вариативности; «Самый маленький файл» перенумеровывает глифы и удаляет таблицы раскладки. Решите, удалять ли хинтинг и использовать ли минимальную таблицу name.
-
Создайте сабсет
Нажмите «Создать сабсет»: инструмент покажет размер до и после, детали по таблицам, самопроверку отрисовки, кнопки «Скачать .ttf» и «Скачать .woff» и фрагмент CSS для копирования.
Как строится сабсет
Инструмент читает каталог sfnt, описанный в спецификации OpenType, затем таблицу cmap (в первую очередь форматы 4 и 12), чтобы сопоставить символы глифам. Потом вычисляется замыкание: компоненты составных глифов («é», использующая «e» и акцент), затем, если функции сохраняются, подстановки GSUB типов с 1 по 4 (одиночные, множественные, альтернативные и лигатурные формы вроде fi, fl, ffi) до неподвижной точки, подчинённые lookup-таблицы контекстных подстановок (типы 5, 6 и 8, расширения типа 7 раскрыты) консервативно, а также варианты из таблицы MATH и цветовые слои таблицы COLR.
- Режим «сохранить функции»: идентификаторы глифов не меняются; неиспользуемые контуры опустошаются (записи loca нулевой длины), cmap перестраивается, GSUB, GPOS, GDEF, kern и fvar остаются нетронутыми и потому действительными, а из gvar вырезаются только данные удалённых глифов.
- Режим «самый маленький файл»: глифы плотно перенумеровываются, компоненты переназначаются, hmtx, loca, glyf, cmap, maxp, hhea и post перестраиваются, таблицы раскладки и вариативности удаляются.
- Удаление хинтинга: fpgm, prep, cvt, hdmx, VDMX и LTSH удаляются, инструкции вырезаются из простых и составных глифов, maxp и gasp корректируются так же, как это делает pyftsubset.
- Запись: отсортированный каталог, таблицы с выравниванием по 4 байта, пересчитанные контрольные суммы и checkSumAdjustment в head, короткий или длинный loca в зависимости от размера, затем WOFF 1.0 со сжатием zlib по таблицам (таблица остаётся несжатой, если сжатие не помогает).
- Самопроверка: полученный шрифт загружается через API FontFace, а текст предпросмотра отрисовывается оригиналом и сабсетом рядом с попиксельным сравнением.
Сколько весит каждая таблица и что с ней делает инструмент
| Таблицы | Роль | Обработка |
|---|---|---|
| glyf, loca | Контуры TrueType и индекс глифов: основная часть объёма | Неиспользуемые контуры опустошаются (режим сохранения) или удаляются с перенумерацией (минимальный режим) |
| cmap | Соответствие символов Юникода глифам | Перестраивается: формат 4 для BMP, формат 12 добавляется для символов вне BMP |
| hmtx, hhea | Ширины и левые боковые отступы | Сохраняются как есть (стабильные идентификаторы) или перестраиваются с оптимизированным numberOfHMetrics |
| GSUB, GPOS, GDEF, kern | Лигатуры, подстановки, кернинг, позиционирование диакритики | Не трогаются в режиме сохранения, удаляются в минимальном режиме (с предупреждением) |
| fpgm, prep, cvt, hdmx, VDMX, LTSH | Хинтинг TrueType и метрики устройств | Удаляются при «Удалить хинтинг», инструкции глифов вырезаются |
| name, post, DSIG | Имена и лицензия, имена глифов, цифровая подпись | name полная или минимальная (ID с 0 по 6, 13, 14, 16, 17, плюс имена осей и экземпляров вариативного шрифта), post в формате 3, DSIG удаляется всегда |
Поведение для шрифтов с контурами TrueType (glyf). Шрифты CFF/OTF анализируются, конвертируются в WOFF и очищаются от таблиц, но их контуры не урезаются.
Когда стоит уменьшать шрифт
- Корпоративный сайт или блог: отдавать только основную латиницу, кириллицу и типографскую пунктуацию, чтобы текст появлялся быстрее.
- Заголовок или логотип акцидентным шрифтом: оставить только буквы слогана, несколько килобайт вместо сотен.
- Шрифты CJK (TrueType): вставить реальный текст страницы и получить десятки килобайт вместо нескольких мегабайт (IPA Gothic: 6,2 МБ, после сабсета абзаца из 154 разных символов около 55 КБ в WOFF и 22 КБ в режиме «Самый маленький файл»); шрифты CJK в формате OTF/CFF не урезаются.
- Проверка перед покупкой или встраиванием: оценить покрытие языков, функции OpenType (tnum, smcp, ss01…) и права fsType, не устанавливая шрифт.
- Конвертация TTF в WOFF: получить корректный WOFF 1.0 и соответствующий фрагмент @font-face, не отправляя лицензионный файл на сервер.
Частые проблемы и решения
- Некоторые символы показываются другим шрифтом: их нет в сабсете; счётчик и самопроверка отмечают отсутствующие, добавьте их в сохраняемый текст.
- Пропали лигатуры или кернинг: выбран «Самый маленький файл»; вернитесь к «Сохранить функции OpenType».
- WOFF не такой маленький, как ожидалось: в режиме сохранения hmtx и loca остаются исходного размера; WOFF очень хорошо сжимает эти области, а минимальный режим действительно их уменьшает.
- Шрифт WOFF2 отклонён: сначала преобразуйте его в TTF или WOFF другим инструментом (инструмент не содержит декодера Brotli/WOFF2).
- Шрифт OTF не урезается: его контуры в формате CFF; преобразуйте его в TTF перед сабсеттингом или используйте только анализ и конвертацию в WOFF.
Конфиденциальность: шрифт читается, анализируется и перезаписывается вашим браузером; файл не загружается и не хранится, что важно для лицензионного шрифта. Ограничения: контуры CFF/OTF не урезаются, WOFF2 не читается и не записывается, контекстные подстановки сохраняются консервативно (в сабсете может оказаться на несколько глифов больше, чем нужно), последовательности вариаций (cmap формат 14) отбрасываются, растровые и цветные таблицы удаляются в минимальном режиме, файлы больше 200 МБ отклоняются. Проверьте лицензию, прежде чем публиковать уменьшенный шрифт.
Частые вопросы
Что такое сабсеттинг шрифта и сколько он экономит?
Сабсеттинг оставляет в файле только те глифы, которые нужны вашим страницам, например основную латиницу и кириллицу вместо тысяч символов полного шрифта. Экономия зависит прежде всего от содержимого шрифта: у большого шрифта со многими письменностями латинско-кириллический сабсет часто занимает лишь 5-10 % исходного размера, а шрифт, и так ограниченный латиницей и кириллицей, теряет заметно меньше. Сжатие WOFF убирает затем ещё от четверти до половины. Измерено этим инструментом: DejaVu Sans (6 253 глифа, 742 КБ), урезанный до основной латиницы и Латиницы-1, весит около 50 КБ в WOFF с сохранёнными функциями OpenType и 14 КБ в режиме «Самый маленький файл». Инструмент показывает размер до и после по каждой таблице.
Можно ли уменьшать купленный шрифт?
Это зависит от лицензии. Свободные лицензии вроде OFL и Apache разрешают изменения (правда, OFL считает сабсет изменённой версией: если у шрифта есть Reserved Font Name, урезанный файл нужно переименовать); многие коммерческие веб-лицензии разрешают сабсеттинг для встраивания, другие прямо его запрещают. Инструмент показывает текст лицензии, записанный в шрифте (name ID 13), и расшифровывает поле fsType: если установлен бит «no subsetting» (0x0100), лицензия требует не урезать шрифт. Всегда проверяйте договор перед публикацией файла.
Почему не поддерживается WOFF2?
WOFF2 основан на сжатии Brotli и на особом преобразовании таблиц glyf и loca, тогда как API Compression Streams в браузерах повсеместно предоставляет только gzip и deflate (Chrome до сих пор не умеет распаковывать Brotli нативно). Чтобы читать или создавать WOFF2, пришлось бы встроить библиотеку Brotli и этот декодер, чего этот полностью локальный инструмент не делает. Преобразуйте WOFF2 в TTF или WOFF другим инструментом, уменьшите шрифт здесь и при желании вернитесь к WOFF2: он обычно на 15-30 % меньше WOFF 1.0 (медианный выигрыш около 25 % для TrueType-шрифтов по отчёту об оценке W3C).
В чём разница между «сохранить функции OpenType» и «самый маленький файл»?
Первый режим сохраняет идентификаторы глифов и лишь опустошает ненужные контуры: таблицы GSUB, GPOS, GDEF и kern остаются действительными, поэтому лигатуры, кернинг и оси вариативного шрифта продолжают работать. Второй режим перенумеровывает глифы и удаляет эти таблицы: файл минимален, но без кернинга и лигатур, а вариативный шрифт становится экземпляром по умолчанию. Для сайта почти всегда подходит первый режим.
Меняет ли удаление хинтинга отрисовку?
Хинтинг TrueType (таблицы fpgm, prep, cvt и инструкции глифов) важен в основном для ClearType в Windows при мелких кеглях. macOS, iOS, Android и большинство браузеров Linux его игнорируют. Удаление часто уменьшает сильно хинтованный шрифт на 20-50 % ценой чуть иной отрисовки мелкого текста в Windows. Опция включена по умолчанию; снимите её, если ваша аудитория в основном читает мелкий текст в Windows.
Как использовать unicode-range в сгенерированном CSS?
Дескриптор unicode-range перечисляет символы сабсета в самой короткой форме (объединённые диапазоны, подстановочные знаки для выровненных диапазонов). Браузер скачивает файл только если страница использует хотя бы один из этих символов, что позволяет разделить шрифт на несколько файлов (латиница, кириллица, греческий), загружаемых по требованию. Вставьте фрагмент @font-face в таблицу стилей и положите файлы по пути, указанному в src.