Почему TTF после экспорта стал слишком большим: диагностика по шагам

Если готовый TTF неожиданно весит в несколько раз больше исходника или предыдущей сборки, причина обычно находится в составе файла, а не в одной «тяжёлой» букве. Сравните число глифов, размеры таблиц и содержимое контуров, затем повторите экспорт с одной переменной за раз. Так вы отличите ожидаемое увеличение от случайно включённых знаков, вариативных данных или растровых изображений.
Сначала убедитесь, что сравниваете одинаковые файлы
До оптимизации зафиксируйте исходные условия: формат обоих файлов, семейство и начертание, версию проекта, выбранный набор знаков и параметры экспорта. Сравнение TTF с WOFF2 ничего не говорит о качестве оптимизации: WOFF2 — сжатая веб-упаковка OpenType, а TTF обычно хранит таблицы в несжатом SFNT-контейнере. Сравнивать нужно TTF с TTF или WOFF2 с WOFF2, причём для одного и того же начертания.
Проверьте размер в байтах, а не округлённые значения в свойствах файла. Например, проводник может показать обоим файлам «1 МБ», хотя один заметно крупнее. Запишите имя файла, размер, дату, число глифов и контрольную сумму. Если размер изменился, но контрольная сумма совпала, вероятно, вы смотрите не на ту пару файлов или видите дубликат с прежним содержимым.
Не начинайте с удаления таблиц наугад. Часть из них необходима для отображения, часть отвечает за метрики, подстановки, кернинг или вариативность. Удалённая таблица может уменьшить файл и одновременно сломать именно ту функцию, ради которой шрифт создавался. Первичная диагностика должна быть наблюдением: что вошло в экспорт и сколько места занимает каждый крупный компонент.
Из чего складывается размер TTF
В OpenType нет единственного блока «буквы». Файл состоит из таблиц: карта символов связывает кодовые точки с глифами; таблицы метрик хранят ширины и вертикальные параметры; таблица имён содержит сведения о семействе и начертании; данные контуров описывают форму знаков. В TrueType-контурах таблица glyf хранит описания глифов, а loca — позиции их данных. Дополнительные таблицы могут содержать инструкции для экранного растрирования, правила OpenType, вертикальные метрики и данные вариативности.
Для самодельного шрифта заметную долю часто занимают именно контуры: сложные кривые, большое количество точек, повторённые формы и компоненты. Но вывод «чем больше глифов, тем пропорционально больше файл» неверен. Простая буква может занимать меньше места, чем сложный орнаментальный знак; составные глифы способны ссылаться на базовые элементы; разные таблицы имеют разные структуры. Поэтому размер всего файла сам по себе не показывает источник прироста.
Если проект использует растровые или цветные глифы, они могут добавить отдельные данные изображений и цветовых слоёв. Если включены OpenType-функции, объём может вырасти за счёт правил подстановки и позиционирования. Для вариативного шрифта сохраняются данные, описывающие изменения форм по осям. Увеличение в таких случаях может быть ожидаемым результатом нужной функции, а не ошибкой экспорта.
Шаг 1. Снимите сводку по файлу
Откройте TTF в программе, которая умеет показывать таблицы шрифта. В FontTools можно получить краткий перечень командой ttx -l путь-к-файлу.ttf. Она помогает увидеть список таблиц и их размеры, не выгружая всё содержимое в XML. Сохраните такой список отдельно для старой и новой сборки. Если у вас нет командной строки, используйте просмотр таблиц в шрифтовом редакторе, но сопоставляйте одинаковые поля.
Сравните не только общий размер, но и набор таблиц. Появление новых таблиц вариативности у статического начертания, цветовых таблиц у обычного текстового шрифта или крупного массива изображений — повод проверить пресет экспорта и включённые возможности проекта. Не всякая новая таблица лишняя: сначала выясните, какую функцию она поддерживает и использует ли её предполагаемое приложение.
При сравнении названия таблиц не обязательно совпадают с привычными словами. Например, glyf хранит TrueType-контуры, loca указывает расположение глифовых данных, а cmap отвечает за соответствие символов и глифов. Если выросла одна таблица, исследуйте её назначение; если увеличились сразу несколько, проверьте изменение набора и конфигурации экспорта. Такой разбор сужает поиск быстрее, чем повторное сохранение проекта целиком.
Шаг 2. Проверьте состав знаков и глифов
Сопоставьте список ожидаемых символов с тем, что реально экспортировано. Наличие буквы в редакторе ещё не гарантирует, что она включена в этот файл; обратное тоже верно: проект может содержать вспомогательные глифы, альтернативы, знаки для других языков и варианты пунктуации. Сравните число глифов и карту Unicode, затем проверьте, не выбрали ли вы полный набор вместо целевого поднабора.
Для проверки используйте реальные строки проекта: названия, фамилии, валюты, кавычки, длинное тире, математические знаки, диакритические буквы. Если файл предназначен только для короткой подписи на русском языке, экспорт всего расширенного многоязычного проекта может быть избыточным. Если тот же файл должен набирать латиницу, имена и специальные символы, удалять их ради меньшего размера нельзя.
Не путайте кодовые точки и глифы. Несколько символов могут использовать один глиф, а одна буква с диакритикой может быть реализована как отдельная составная форма или с помощью базового глифа и комбинируемого знака. Поэтому простой подсчёт символов в текстовом списке не равен точному числу записей в файле. После сокращения набора проверьте отображение всего тестового текста, а не только длину файла.
Шаг 3. Найдите тяжёлые контуры и дубликаты
Если основной прирост виден в таблице glyf, проверьте сложные формы, орнаменты, крупные декоративные знаки и контуры с необычно большим количеством опорных точек. Увеличение числа точек часто связано с импортом векторных контуров или автоматической трассировкой. Сравните подозрительные глифы с исходником и удалите случайные мелкие фрагменты, если они не являются частью рисунка.
Проверьте повторяющиеся формы, которые можно представить компонентами. Например, акцентированная буква может строиться из базового глифа и знака диакритики. Однако превращение всех контуров в компоненты не гарантирует уменьшения файла: результат зависит от повторного использования формы, ограничений редактора и того, как программа записывает данные. Делайте пробную сборку и проверяйте одновременно размер, корректность отображения и работу позиционирования знаков.
Сравните контуры до и после упрощения в увеличенном масштабе, в обычном кегле и в строках с соседними буквами. Удаление лишних точек должно сохранять край штриха, просветы, соединения и характер почерка. Алгоритмическое упрощение, которое визуально почти незаметно на крупном экране, может изменить тонкий участок или стык в маленьком размере. Снижение размера не оправдывает потерю узнаваемости формы.
Шаг 4. Проверьте инструкции, функции и вариативные данные
В TrueType-файле могут присутствовать инструкции для подгонки контура к пиксельной сетке. Если инструменты проверки показывают, что большой объём приходится на связанные с hinting таблицы, выясните, добавляет ли их ваш редактор автоматически и нужны ли они для целевых платформ. Не отключайте их только из-за размера: сравните рендеринг в нескольких размерах и на устройствах, где шрифт действительно будет использоваться.
Сверьте OpenType-функции с заданием. Лигатуры, контекстные альтернативы, кернинг и позиционирование диакритики могут требовать таблиц GSUB и GPOS. Удаление правил целиком способно убрать полезное поведение, хотя визуально отдельные глифы останутся на месте. Если функция не нужна, удаляйте её в исходном проекте осознанно, затем проверяйте пары, слова и акцентированные буквы, для которых она была создана.
Если проект вариативный, проверьте, экспортируете ли вы сам вариативный файл или статический экземпляр. Вариативный файл хранит изменения форм по координатам осей; статическая версия фиксирует конкретное сочетание значений. Она может быть меньше, но для нескольких нужных начертаний придётся хранить несколько файлов, и суммарный объём может оказаться больше. Выбирайте вариант по сценарию использования, а не по одному числу в свойствах файла.
Шаг 5. Сверьте настройки экспорта и сделайте контролируемую сборку
Откройте настройки экспорта и проверьте формат контура, набор символов, включение hinting, функций, цветовых данных, вариативности и приватных таблиц. Запишите значения до изменений. Затем меняйте только один параметр и экспортируйте пробную копию под отдельным именем. Когда одновременно меняются набор знаков, контуры и таблицы, невозможно понять, что именно повлияло на результат и не исчезла ли полезная функция.
После каждого экспорта делайте три проверки. Во-первых, сравните размеры файла и крупных таблиц. Во-вторых, откройте шрифт в отдельном приложении или установите тестовую копию во временную среду, чтобы не принять кэш старой версии за новый результат. В-третьих, наберите тестовый текст с кириллицей, цифрами, пунктуацией, диакритикой и нужными лигатурами. Проверяйте не только наличие глифа, но и ширину, интервалы, выносные элементы и позиционирование акцентов.
Храните рядом исходный проект, экспортированный файл, список экспортных параметров и короткую заметку о причине изменения. Дайте пробным файлам разные имена и не перезаписывайте готовый шрифт до окончания проверки. Если оптимизация оказалась неудачной, такая запись позволяет вернуться к рабочему состоянию и повторить эксперимент, не угадывая, какая комбинация настроек использовалась.
Когда нужен другой формат
Если задача состоит в передаче шрифта через веб-страницу, отдельно оцените WOFF2. Спецификация W3C описывает этот формат как упаковку данных шрифта с компрессией Brotli и преобразованиями, рассчитанными на уменьшение веб-файла. Это не универсальная замена TTF: установочные приложения и печатные рабочие процессы могут ожидать исходный формат OpenType/TrueType. Сравнивайте размер только с учётом того, где файл будет использоваться и кто его откроет.
Не удаляйте символы из веб-файла лишь потому, что WOFF2 стал меньше. Сначала определите текст и языки сайта, проверьте все шаблоны, динамические подписи и пользовательский ввод. Поднабор, в котором забыты знак рубля, кавычки или латинское имя, создаёт визуальную ошибку на странице. Для веб-доставки важны и состав файла, и правильная загрузка ресурса браузером; для локального использования важнее совместимость с приложениями и сохранение полного набора.
Короткий алгоритм диагностики
- Сравните одинаковые форматы, начертания и версии проекта; измерьте размер в байтах.
- Снимите список таблиц и их размеры для обеих сборок.
- Проверьте количество глифов, карту символов и выбранный набор.
- Исследуйте выросшие контуры, растровые данные, функции и вариативные таблицы.
- Измените один параметр экспорта и соберите отдельную пробную копию.
- Проверьте тестовые строки в целевых приложениях, затем сохраните параметры успешного экспорта.
Частые ошибки при уменьшении файла
- Сравнивать TTF и WOFF2 как будто это одинаковые контейнеры.
- Удалять таблицы без понимания их функции и ломать метрики, функции или совместимость.
- Сокращать Unicode-набор, не проверив имена, пунктуацию и языки реального контента.
- Упрощать все контуры автоматически и терять форму тонких штрихов или диакритики.
- Отключать hinting, не проверив отображение на целевых экранах.
- Судить о новом файле по кэшу приложения или по старому файлу с похожим именем.
Полезно вести короткий журнал сборок: версия исходника, формат, число глифов, размер, изменённая настройка и результат проверки. Тогда рост файла становится измеримым изменением, а не загадкой. Если нужно сделать собственный рукописный шрифт, начните с аккуратного набора знаков и последовательного экспорта в Fontgenerator, а затем проверяйте готовые файлы в тех приложениях, где они будут работать.
Часто задаваемые вопросы
Почему новый TTF больше исходного проекта?
Исходный проект и TTF хранят разные данные. При экспорте добавляются таблицы кодирования, метрик, имён, контуров и функций, а размер также зависит от набора глифов и параметров сборки. Чтобы найти причину, сравните список таблиц и число глифов в обеих версиях.
Можно ли уменьшить TTF удалением таблиц?
Только если вы точно знаете назначение таблицы и подтвердили, что целевой сценарий не использует её данные. Таблицы могут отвечать за кодирование, ширины, подстановки, позиционирование и совместимость. Безопаснее отключить ненужную возможность в редакторе и проверить отдельную пробную сборку.
Что обычно занимает больше всего места в файле шрифта?
Это зависит от конкретного шрифта. Часто существенный вклад дают данные контуров, растровые или цветные глифы, OpenType-функции и данные вариативности. Посмотрите размеры таблиц инструментом анализа файла, вместо того чтобы исходить из общего размера или количества букв.
Поможет ли перевод TTF в WOFF2?
Для доставки через веб WOFF2 часто уменьшает объём передаваемого файла благодаря специализированному сжатию и преобразованию таблиц. Этот формат рассчитан на веб-сценарий и не заменяет TTF во всех приложениях. Сначала проверьте, какой формат поддерживает платформа, где будет использоваться шрифт.
Нужно ли оставлять все языковые знаки?
Оставляйте все знаки, которые могут встретиться в реальных текстах проекта: языковые буквы, цифры, пунктуацию, математические и валютные символы. Поднабор допустим, если сценарий закрыт и проверяем. Для сайта учтите динамические данные, имена и контент, который появится позже.
Как понять, что файл после оптимизации не сломан?
Откройте его в независимом от редактора приложении и проверьте контрольные строки. Включите пары с кернингом, диакритические знаки, цифры, пунктуацию и все требуемые языки. Также сравните ширины и выносные элементы и убедитесь, что приложение показывает именно новый файл, а не кэшированную версию.
Можно ли хранить только вариативный файл вместо нескольких TTF?
Если целевые приложения поддерживают вариативные шрифты, один variable font может заменить несколько отдельных начертаний в поставке. Для старого ПО или печатного процесса может понадобиться статический экземпляр. Сравнивайте не только размер одного файла, но и суммарный объём полного комплекта и совместимость.
Источники для проверки форматов
- OpenType 1.9.1: структура файла и таблицы — https://learn.microsoft.com/en-us/typography/opentype/spec/otff
- Microsoft OpenType: таблица glyf — https://learn.microsoft.com/en-us/typography/opentype/spec/glyf
- W3C: спецификация WOFF 2.0 — https://www.w3.org/TR/WOFF2/
- FontTools: команда ttx — https://fonttools.readthedocs.io/en/latest/ttx.html