SS Тулбокс
SS Тулбокс
Все данные обрабатываются локально

Конвертер форматов шрифтов — WOFF2 в TTF, TTF в WOFF/WOFF2 прямо в браузере

Конвертируйте веб-шрифты между TTF, WOFF и WOFF2, не покидая страницу: исходный формат определяется по сигнатуре файла, покрытие глифов и TrueType-хинтинг переносятся без изменений, а данные никуда не отправляются — кодек WOFF2 собран локально в WebAssembly. Шрифт CJK на 20 МБ тоже конвертируется, но это десятки секунд и по одному файлу за раз.

Что меняет этот конвертер шрифтов — и что оставляет нетронутым

  1. Три формата на входе, три на выходе

    Выберите файл .ttf, .woff или .woff2, укажите TTF, WOFF или WOFF2 как целевой формат и скачайте результат. Исходный формат распознаётся по сигнатуре (wOFF, wOF2, true/OTTO/0x00010000), поэтому указывать его вручную не нужно; при выборе того же формата возвращаются исходные байты.

  2. WOFF2 в TTF и обратно — локально

    Кодирование и декодирование WOFF2 выполняет кодек Google WOFF2, скомпилированный в WebAssembly прямо на странице, а старый контейнер WOFF обрабатывает pako на чистом JavaScript — без обращения к серверу.

  3. Покрытие глифов и хинтинг сохраняются

    Инструмент перепаковывает таблицы шрифта, а не перерисовывает контуры: число глифов и покрытие cmap остаются идентичными, а таблицы TrueType-хинтинга (cvt, prep, fpgm и инструкции glyf) переносятся без изменений. Единственная таблица, которую отбрасывает кодек WOFF2, — DSIG, цифровая подпись.

  4. Сделано для совместимости веб-шрифтов

    Отдавайте WOFF2 современным браузерам, храните WOFF или TTF для старых стеков либо приведите папку с разными шрифтами к одному формату. Если нужен только файл поменьше, используйте генератор сабсетов — эта страница никогда не удаляет глифы.

  5. Ограничения названы прямо

    Один файл за раз (читается только первый выбранный), никаких регуляторов начертания или курсива, а коллекции 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, поэтому перед публикацией переименуйте файл под название своего семейства шрифтов.

Связанные инструменты
SponsorMindElixir