Odchudzanie fontu (subsetting): TTF, OTF, WOFF
Sprawdź font, zachowaj potrzebne znaki i wyeksportuj TTF oraz WOFF.
- Natychmiast
- Za darmo
- Prywatnie (przetwarzane lokalnie)
- Bez rejestracji
Odchudzanie fontu webowego przez subsetting, bez wysyłania pliku
Pełny font zawiera tysiące glifów, a strona używa tylko ich ułamka: odchudzanie fontu (subsetting) polega na zachowaniu wyłącznie potrzebnych znaków i skompresowaniu wyniku do WOFF. Poważne narzędzia działają w wierszu poleceń (pyftsubset z fontTools, glyphhanger) albo wymagają wysłania pliku na serwer, co jest problemem przy foncie licencjonowanym.
To narzędzie robi wszystko w przeglądarce: czyta TTF, OTF, WOFF 1.0 i TTC, pokazuje pełny inspektor (nazwy, licencja, uprawnienia fsType, osie zmienności, pokrycie Unicode według bloków, obsługiwane języki, funkcje OpenType, rozmiar każdej tabeli), tworzy podzbiór TrueType z domknięciem komponentów i ligatur, zapisuje TTF i WOFF, sprawdza, czy wygenerowany font się wczytuje, i generuje CSS @font-face z unicode-range.
-
Wybierz font
Upuść plik TTF, OTF, WOFF lub TTC albo kliknij „Wybierz font”. W kolekcji TTC wskaż font do wyodrębnienia. Plik WOFF2 (sygnatura wOF2) jest wykrywany i odrzucany z wyjaśnieniem.
-
Przeczytaj inspektor
Sprawdź rodzinę, wersję, licencję (name ID 13) i uprawnienia do osadzania fsType, osie fvar, pokrycie Unicode według bloków, prawdopodobnie obsługiwane języki i funkcje GSUB/GPOS. Mapa glifów i wyszukiwarka odpowiadają na pytanie „czy ten font ma ẞ albo €?”.
-
Wybierz znaki do zachowania
Wklej tekst w polu „Tekst do zachowania”, zaznacz zestawy gotowe (Podstawowy łaciński, Latin-1, Grecki, Cyrylica…) lub wpisz zakresy Unicode. Licznik pokazuje znaki obecne, brakujące oraz liczbę glifów zachowanych po domknięciu.
-
Ustaw tryb wyjścia
„Zachowaj funkcje OpenType” utrzymuje kerning, ligatury i osie zmienności; „Najmniejszy plik” przenumerowuje glify i usuwa tabele układu. Zdecyduj o usunięciu hintingu i minimalnej tabeli name.
-
Utwórz podzbiór
Kliknij „Utwórz podzbiór”: narzędzie pokaże rozmiar przed i po, szczegóły według tabel, autotest renderingu, przyciski „Pobierz .ttf” i „Pobierz .woff” oraz fragment CSS do skopiowania.
Jak powstaje podzbiór
Narzędzie czyta katalog sfnt opisany w specyfikacji OpenType, a następnie tabelę cmap (przede wszystkim formaty 4 i 12), aby powiązać znaki z glifami. Potem oblicza domknięcie: komponenty glifów złożonych („é” korzystające z „e” i akcentu), a jeśli funkcje są zachowane, podstawienia GSUB typów od 1 do 4 (pojedyncze, wielokrotne, alternatywne i ligatury takie jak fi, fl, ffi) iterowane do punktu stałego, pod-lookupy podstawień kontekstowych (typy 5, 6 i 8, rozszerzenia typu 7 rozwiązane) w sposób zachowawczy, warianty z tabeli MATH oraz warstwy kolorów z tabeli COLR.
- Tryb „zachowaj funkcje”: identyfikatory glifów się nie zmieniają; nieużywane obrysy są opróżniane (wpisy loca o zerowej długości), cmap jest przebudowywana, GSUB, GPOS, GDEF, kern i fvar pozostają nietknięte, a więc poprawne, a z gvar znikają tylko dane usuniętych glifów.
- Tryb „najmniejszy plik”: glify są ciasno przenumerowane, komponenty przemapowane, hmtx, loca, glyf, cmap, maxp, hhea i post przebudowane, a tabele układu i zmienności usunięte.
- Usunięcie hintingu: znikają fpgm, prep, cvt, hdmx, VDMX i LTSH, instrukcje są usuwane z glifów prostych i złożonych, a maxp i gasp są korygowane tak jak robi to pyftsubset.
- Zapis: posortowany katalog, tabele wyrównane do 4 bajtów, sumy kontrolne tabel i checkSumAdjustment w head przeliczone, krótkie lub długie loca zależnie od rozmiaru, a następnie WOFF 1.0 z kompresją zlib dla każdej tabeli (tabela pozostaje surowa, gdy kompresja nie pomaga).
- Autotest: wygenerowany font jest wczytywany przez API FontFace, a tekst podglądu renderowany oryginałem i podzbiorem obok siebie, z porównaniem pikseli.
Ile waży każda tabela i co robi z nią narzędzie
| Tabele | Rola | Obsługa |
|---|---|---|
| glyf, loca | Obrysy TrueType i indeks glifów: większość rozmiaru | Nieużywane obrysy opróżniane (tryb zachowania) lub usuwane i przenumerowane (tryb minimalny) |
| cmap | Odwzorowanie znaków Unicode na glify | Przebudowana: format 4 dla BMP, format 12 dodany dla znaków spoza BMP |
| hmtx, hhea | Szerokości i lewe odsadki | Zachowane bez zmian (stałe identyfikatory) lub przebudowane ze zoptymalizowanym numberOfHMetrics |
| GSUB, GPOS, GDEF, kern | Ligatury, podstawienia, kerning, pozycjonowanie diakrytyków | Nietknięte w trybie zachowania, usuwane w trybie minimalnym (z ostrzeżeniem) |
| fpgm, prep, cvt, hdmx, VDMX, LTSH | Hinting TrueType i metryki urządzeń | Usuwane z opcją „Usuń hinting”, instrukcje glifów wycinane |
| name, post, DSIG | Nazwy i licencja, nazwy glifów, podpis cyfrowy | name pełna lub minimalna (ID od 0 do 6, 13, 14, 16, 17, plus nazwy osi i instancji fontu zmiennego), post w formacie 3, DSIG zawsze usuwana |
Zachowanie dla fontów z obrysami TrueType (glyf). Fonty CFF/OTF są analizowane, konwertowane do WOFF i pozbawiane tabel, ale ich obrysy nie są przycinane.
Kiedy warto odchudzić font
- Strona firmowa lub blog: serwować tylko podstawowy łaciński, Latin-1 i interpunkcję typograficzną, aby tekst pojawiał się szybciej.
- Nagłówek lub logo w kroju dekoracyjnym: zachować tylko litery hasła, kilka kilobajtów zamiast setek.
- Fonty CJK (TrueType): wkleić prawdziwy tekst strony i zejść z kilku megabajtów do kilkudziesięciu kilobajtów (IPA Gothic: z 6,2 MB do około 55 KB w WOFF dla akapitu ze 154 różnymi znakami, 22 KB w trybie „Najmniejszy plik”); fonty CJK w formacie OTF/CFF nie są przycinane.
- Audyt przed zakupem lub osadzeniem: sprawdzić pokrycie języków, funkcje OpenType (tnum, smcp, ss01…) i uprawnienia fsType bez instalowania fontu.
- Konwersja TTF na WOFF: uzyskać poprawny WOFF 1.0 i pasujący fragment @font-face bez wysyłania licencjonowanego pliku na serwer.
Częste problemy i rozwiązania
- Niektóre znaki wyświetlają się innym fontem: nie ma ich w podzbiorze; licznik i autotest wskazują brakujące, dodaj je do tekstu do zachowania.
- Zniknęły ligatury lub kerning: wybrano „Najmniejszy plik”; wróć do „Zachowaj funkcje OpenType”.
- WOFF nie jest tak mały, jak oczekiwano: w trybie zachowania hmtx i loca mają pierwotny rozmiar; WOFF bardzo dobrze kompresuje te obszary, a tryb minimalny naprawdę je zmniejsza.
- Font WOFF2 odrzucony: najpierw przekonwertuj go na TTF lub WOFF innym narzędziem (narzędzie nie zawiera dekodera Brotli/WOFF2).
- Font OTF nie jest przycinany: jego obrysy są w CFF; przekonwertuj go na TTF przed odchudzaniem albo poprzestań na inspekcji i konwersji do WOFF.
Prywatność: font jest czytany, analizowany i zapisywany ponownie przez twoją przeglądarkę; żaden plik nie jest wysyłany ani przechowywany, co ma znaczenie przy foncie licencjonowanym. Ograniczenia: obrysy CFF/OTF nie są przycinane, WOFF2 nie jest czytany ani zapisywany, podstawienia kontekstowe są zachowywane zachowawczo (podzbiór może zawierać kilka glifów więcej, niż trzeba), sekwencje wariantów (cmap format 14) są odrzucane, tabele bitmap i kolorów są usuwane w trybie minimalnym, pliki powyżej 200 MB są odrzucane. Sprawdź licencję przed publikacją odchudzonego fontu.
Najczęstsze pytania
Czym jest subsetting fontu i ile pozwala zaoszczędzić?
Subsetting zostawia w pliku tylko glify potrzebne na twoich stronach, na przykład podstawowy łaciński i polskie znaki zamiast tysięcy znaków pełnego fontu. Oszczędność zależy przede wszystkim od zawartości fontu: w dużym foncie z wieloma systemami pisma podzbiór łaciński waży często zaledwie 5-10 % oryginału, a font ograniczony już do łaciny traci znacznie mniej. Kompresja WOFF zabiera potem jeszcze od jednej czwartej do połowy. Zmierzone tym narzędziem: DejaVu Sans (6 253 glify, 742 KB) ograniczony do podstawowego łacińskiego i Latin-1 waży około 50 KB w WOFF z zachowanymi funkcjami OpenType i 14 KB w trybie „Najmniejszy plik”. Narzędzie pokazuje rozmiar przed i po, tabela po tabeli.
Czy mogę odchudzić kupiony font?
To zależy od licencji. Wolne licencje, takie jak OFL czy Apache, pozwalają na modyfikacje (OFL traktuje jednak podzbiór jako wersję zmodyfikowaną: jeśli font ma Reserved Font Name, odchudzony plik trzeba przemianować); wiele komercyjnych licencji webowych dopuszcza subsetting do osadzania, inne wprost go zabraniają. Narzędzie wyświetla tekst licencji zapisany w foncie (name ID 13) i dekoduje pole fsType: jeśli ustawiony jest bit „no subsetting” (0x0100), licencja wymaga, by fontu nie przycinać. Zawsze sprawdź umowę przed publikacją pliku.
Dlaczego WOFF2 nie jest obsługiwany?
WOFF2 opiera się na kompresji Brotli oraz na specjalnej transformacji tabel glyf i loca, a API Compression Streams w przeglądarkach udostępnia wszędzie tylko gzip i deflate (Chrome nadal nie dekoduje Brotli natywnie). Odczyt lub zapis WOFF2 wymagałby dołączenia biblioteki Brotli i tego dekodera, czego to w pełni lokalne narzędzie nie robi. Przekonwertuj WOFF2 na TTF lub WOFF innym narzędziem, odchudź go tutaj i w razie potrzeby wróć do WOFF2: WOFF2 jest zwykle o 15-30 % mniejszy niż WOFF 1.0 (mediana zysku około 25 % dla fontów TrueType według raportu ewaluacyjnego W3C).
Czym różni się „zachowaj funkcje OpenType” od „najmniejszy plik”?
Pierwszy tryb zachowuje identyfikatory glifów i tylko opróżnia nieużywane obrysy: tabele GSUB, GPOS, GDEF i kern pozostają poprawne, więc ligatury, kerning i osie fontu zmiennego nadal działają. Drugi tryb przenumerowuje glify i usuwa te tabele: plik jest minimalny, ale bez kerningu i ligatur, a font zmienny staje się instancją domyślną. Dla strony internetowej pierwszy tryb jest niemal zawsze właściwym wyborem.
Czy usunięcie hintingu zmienia rendering?
Hinting TrueType (tabele fpgm, prep i cvt oraz instrukcje glifów) ma znaczenie głównie dla renderowania ClearType w Windows w małych stopniach pisma. macOS, iOS, Android i większość przeglądarek na Linuksie go ignorują. Usunięcie często zmniejsza mocno hintowany font o 20 do 50 %, kosztem nieco innego renderingu małego tekstu w Windows. Opcja jest domyślnie włączona; wyłącz ją, jeśli twoi odbiorcy czytają głównie mały tekst w Windows.
Jak używać unicode-range w wygenerowanym CSS?
Deskryptor unicode-range wymienia znaki zawarte w podzbiorze w najkrótszej postaci (scalone zakresy, symbole wieloznaczne przy wyrównanych zakresach). Przeglądarka pobiera plik tylko wtedy, gdy strona używa choć jednego z tych znaków, co pozwala podzielić font na kilka plików (łaciński, cyrylica, grecki) ładowanych na żądanie. Wklej fragment @font-face do arkusza stylów i umieść pliki w ścieżce podanej w src.