Конвертер форматов шрифтов — WOFF2 в TTF, TTF в WOFF/WOFF2 прямо в браузере
Конвертируйте веб-шрифты между TTF, WOFF и WOFF2, не покидая страницу: исходный формат определяется по сигнатуре файла, покрытие глифов и TrueType-хинтинг переносятся без изменений, а данные никуда не отправляются — кодек WOFF2 собран локально в WebAssembly. Шрифт CJK на 20 МБ тоже конвертируется, но это десятки секунд и по одному файлу за раз.
Что меняет этот конвертер шрифтов — и что оставляет нетронутым
Три формата на входе, три на выходе
Выберите файл .ttf, .woff или .woff2, укажите TTF, WOFF или WOFF2 как целевой формат и скачайте результат. Исходный формат распознаётся по сигнатуре (wOFF, wOF2, true/OTTO/0x00010000), поэтому указывать его вручную не нужно; при выборе того же формата возвращаются исходные байты.
WOFF2 в TTF и обратно — локально
Кодирование и декодирование WOFF2 выполняет кодек Google WOFF2, скомпилированный в WebAssembly прямо на странице, а старый контейнер WOFF обрабатывает pako на чистом JavaScript — без обращения к серверу.
Покрытие глифов и хинтинг сохраняются
Инструмент перепаковывает таблицы шрифта, а не перерисовывает контуры: число глифов и покрытие cmap остаются идентичными, а таблицы TrueType-хинтинга (cvt, prep, fpgm и инструкции glyf) переносятся без изменений. Единственная таблица, которую отбрасывает кодек WOFF2, — DSIG, цифровая подпись.
Сделано для совместимости веб-шрифтов
Отдавайте WOFF2 современным браузерам, храните WOFF или TTF для старых стеков либо приведите папку с разными шрифтами к одному формату. Если нужен только файл поменьше, используйте генератор сабсетов — эта страница никогда не удаляет глифы.
Ограничения названы прямо
Один файл за раз (читается только первый выбранный), никаких регуляторов начертания или курсива, а коллекции TTC отклоняются как нераспознанная сигнатура. Шрифт CJK на 20 МБ конвертируется, но на это уходят десятки секунд и сотни МБ оперативной памяти.
Частые вопросы о конвертации форматов шрифтов
Какие форматы на входе и выходе поддерживаются?
Вход: TTF (TrueType sfnt), WOFF и WOFF2 — те три расширения, которые принимает выбор файла; исходный формат определяется автоматически. Выход: TTF, WOFF или WOFF2 из выпадающего списка. Коллекции TTC/OTC завершаются ошибкой «Unrecognized font signature: ttcf», а OTF не предлагается в выборе файла, хотя парсер распознал бы шрифт OTTO/CFF.
Можно изменить начертание или сделать шрифт курсивным?
Нет. Конвертация лишь перепаковывает существующие контуры и таблицы; она не синтезирует жирность, наклон или дополнительные начертания. Для этого нужен редактор шрифтов или ось вариативного шрифта, а на этой странице таких элементов управления нет.
Теряются ли покрытие символов или хинтинг при конвертации?
Покрытие и TrueType-хинтинг сохраняются: все таблицы копируются, число глифов остаётся прежним (шрифт Song на 20,9 МБ сохранил все 60 455 глифов), а cvt, prep, fpgm и инструкции glyf остаются на месте. Кодирование WOFF2 отбрасывает только таблицу подписи DSIG; выходной WOFF сохраняет все таблицы.
Справится ли он с большими CJK-шрифтами и сколько нужно памяти?
Да, но ограничения по размеру нет, и весь файл загружается в память. Измерено здесь: TTF на 20,9 МБ превратился в WOFF2 на 8,6 МБ примерно за 55 секунд при примерно 350 МБ памяти; Noto Sans SC на 16,9 МБ занял около 39 секунд при около 400 МБ. В это время основной поток заблокирован и страница зависает — по возможности сначала создайте сабсет.
Можно конвертировать несколько шрифтов одной партией?
Нет. Выбор файла читает только один файл (files[0]), и каждый запуск перезаписывает предыдущий результат; очереди, списка прогресса и пакетного режима с перетаскиванием нет.
Всё работает локально или через сервер?
Полностью локально. Кодирование и декодирование WOFF2 идут в модуле Emscripten WebAssembly, встроенном как data URI, а упаковкой WOFF занимается pako на JavaScript. Шрифт никуда не отправляется, поэтому лицензионные шрифты остаются приватными.
Что будет, если конвертация не удалась, и почему файл всегда называется font.*?
При ошибке ничего не скачивается, а ошибка выводится только в консоль; уведомление об успехе появляется уже после создания blob. Имя загрузки жёстко задано как font.ttf, font.woff или font.woff2, поэтому перед публикацией переименуйте файл под название своего семейства шрифтов.

