Jak pracować z czcionkami WOFF w Python

Jak pracować z czcionkami WOFF w Python

Ten przewodnik pokazuje, jak ładować, przeglądać i konwertować czcionki internetowe WOFF i WOFF2 przy użyciu Aspose.Font FOSS dla Python. WOFF (Web Open Font Format) jest standardem dostarczania czcionek w sieci. WOFF 1 używa kompresji zlib, a WOFF 2 używa kompresji Brotli, oba opakowują podstawową czcionkę TrueType lub CFF. Aspose.Font FOSS ładuje oba formaty i udostępnia wewnętrzne dane czcionki poprzez czysty API.

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

Zainstaluj pakiet Aspose.Font FOSS używając poniższego polecenia:

git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .

Krok 2: Zaimportuj wymagane klasy

Importuj FontLoader, FontConverter i FontType, aby wczytać i konwertować czcionki WOFF:

from aspose_font import FontLoader
from aspose_font.converter import FontConverter  # internal API — may change between releases
from aspose_font import FontType

Krok 3: Wczytaj i zbadaj czcionkę WOFF

Wczytaj plik WOFF za pomocą FontLoader.open() i odczytaj podstawowe właściwości, takie jak nazwa, rodzina i liczba glifów:

from aspose_font import FontLoader

woff_font = FontLoader.open("MyFont.woff")
print(f"Name: {woff_font.font_name}")
print(f"Family: {woff_font.font_family}")
print(f"Glyphs: {woff_font.num_glyphs}")
print(f"Type: {woff_font.font_type}")

Krok 4: Odczytaj metadane WOFF

Pliki WOFF mogą zawierać blok metadanych XML z informacjami o licencjonowaniu, podziękowaniach i opisie. Uzyskaj do niego dostęp za pośrednictwem właściwości metadata_xml.

from aspose_font import FontLoader

font = FontLoader.open("MyFont.woff")
# WOFF fonts may include an XML metadata block
xml = getattr(font, "metadata_xml", None)
if xml:
    print(xml)
else:
    print("No metadata in this WOFF file")

Krok 5: Uzyskaj dostęp do wewnętrznych tabel TTF

Zarówno WoffFont, jak i Woff2Font udostępniają właściwość inner_font, która daje dostęp do podstawowego TtfFont. Dzięki niej możesz uzyskać dostęp do wszystkich standardowych tabel OpenType.

from aspose_font import FontLoader

font = FontLoader.open("MyFont.woff")
# WOFF wraps a TrueType font; access its tables via inner_font
inner = getattr(font, "inner_font")
tables = inner.ttf_tables

print(f"Units/em: {tables.head.units_per_em}")
print(f"Family name: {tables.name.best_name(1)}")

Krok 6: Konwertuj TTF na WOFF

Załaduj czcionkę TTF i przekonwertuj ją na format WOFF, przekazując FontType.WOFF do FontConverter.convert():

from aspose_font import FontLoader
from aspose_font.converter import FontConverter  # internal API — may change between releases
from aspose_font import FontType

ttf_font = FontLoader.open("MyFont.ttf")
woff_font = FontConverter.convert(ttf_font, FontType.WOFF)
woff_bytes = woff_font.to_bytes()

from pathlib import Path
Path("MyFont.woff").write_bytes(woff_bytes)

Krok 7: Konwertuj TTF na WOFF2

Załaduj czcionkę TTF i przekonwertuj ją na format WOFF2, przekazując FontType.WOFF2 do FontConverter.convert():

from aspose_font import FontLoader
from aspose_font.converter import FontConverter  # internal API — may change between releases
from aspose_font import FontType

ttf_font = FontLoader.open("MyFont.ttf")
woff2_font = FontConverter.convert(ttf_font, FontType.WOFF2)
woff2_bytes = woff2_font.to_bytes()

from pathlib import Path
Path("MyFont.woff2").write_bytes(woff2_bytes)

Krok 8: Konwertuj pomiędzy WOFF a WOFF2

Przekonwertuj załadowany plik WOFF na WOFF2 (lub odwrotnie), przekazując docelowy FontType do FontConverter.convert():

from aspose_font import FontLoader
from aspose_font.converter import FontConverter  # internal API — may change between releases
from aspose_font import FontType

# WOFF -> WOFF2
woff_font = FontLoader.open("MyFont.woff")
woff2_font = FontConverter.convert(woff_font, FontType.WOFF2)

# WOFF2 -> WOFF
woff2_font = FontLoader.open("MyFont.woff2")
woff_font = FontConverter.convert(woff2_font, FontType.WOFF)

Typowe problemy i rozwiązania

FontParseException: Invalid WOFF signature — Plik nie jest prawidłową czcionką WOFF. Sprawdź, czy plik nie jest uszkodzony i zaczyna się od bajtów magicznych WOFF.

FontParseException: WOFF table decompression failed — Skompresowana tabela wewnątrz pliku WOFF jest uszkodzona. Spróbuj ponownie pobrać plik czcionki.

Duży rozmiar wyjścia WOFF2 — WOFF2 używa kompresji Brotli, która generuje mniejsze pliki niż WOFF 1 (zlib). Jeśli wyjście WOFF2 jest nieoczekiwanie duże, upewnij się, że zaczynasz od zoptymalizowanego źródła TTF.

Najczęściej zadawane pytania

Jaka jest różnica między WOFF a WOFF2?

WOFF 1 używa kompresji zlib, a WOFF 2 używa kompresji Brotli. WOFF2 zazwyczaj osiąga o 20-30% lepszą kompresję niż WOFF 1. Oba opakowują te same podstawowe dane czcionki TrueType lub CFF.

Czy mogę uzyskać dostęp do tabel czcionki z pliku WOFF?

Tak. Użyj właściwości inner_font, aby uzyskać podstawowy TtfFont, a następnie uzyskaj dostęp do tabel poprzez inner_font.ttf_tables.

Czy biblioteka obsługuje metadane WOFF?

Tak. Zarówno WoffFont, jak i Woff2Font udostępniają właściwość metadata_xml, zawierającą opcjonalny blok metadanych XML.

Zobacz także

 Polski