Wprowadzenie
Czcionki TrueType (.ttf) i ich nadzbiór OpenType (.otf) są dominującymi formatami czcionek w nowoczesnych systemach operacyjnych. Oba formaty dzielą tę samą binarną strukturę tabel opartą na specyfikacji OpenType. Aspose.Font FOSS dla Python udostępnia tę strukturę poprzez TtfFont, zapewniając bezpośredni dostęp do poszczególnych tabel OpenType, danych par kerningowych, osi czcionek zmiennych oraz konturów glifów.
Klasa TtfFont rozszerza klasę bazową Font o metody specyficzne dla TTF, w tym get_blob, get_table_bytes, set_table_bytes oraz instantiate służące do blokowania osi czcionek zmiennych. Właściwość TtfTableSet (ttf_tables) zapewnia typowany dostęp do najczęściej używanych tabel OpenType: head, hhea, maxp, os2, name, post.
Biblioteka jest publikowana na PyPI jako aspose-font i udostępniona na licencji MIT. Nie posiada obowiązkowych zależności komercyjnych.
Kluczowe funkcje
Ładowanie czcionek TTF i OTF
Użyj FontLoader.open, aby załadować dowolny plik czcionki TrueType lub OpenType:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
print(loaded.font_name)
print(loaded.font_family)
print(loaded.font_style)
print(loaded.num_glyphs)
FontLoader.open wykrywa format czcionki z nagłówka pliku. Zarówno .ttf (TrueType), jak i .otf (OpenType CFF) są obsługiwane i oba zwracają instancję TtfFont.
Uzyskiwanie dostępu do tabel OpenType za pośrednictwem TtfTableSet
Właściwość ttf_tables zwraca TtfTableSet z typowanymi dostępami do typowych tabel OpenType. Każda właściwość zwraca obiekt tabeli lub None, jeśli nie istnieje:
Właściwość ttf_tables w TtfFont zwraca instancję TtfTableSet. Dostępne akcesory tabel:
head—HeadTable | Nonehhea—HheaTable | Nonemaxp—MaxpTable | Noneos2—Os2Table | Nonename—NameTable | Nonepost—PostTable | None
Każda właściwość zwraca obiekt tabeli lub None, jeśli ta tabela nie jest obecna w pliku czcionki. Uzyskaj dostęp do właściwości TtfTableSet, aby sprawdzić konkretne tabele przed ich odczytem. Dla tabel nieobsługiwanych przez nazwane akcesory, użyj TtfTableSet.get_raw(tag), aby pobrać surowe bajty za pomocą czteroznakowego znacznika OpenType.
Odczytywanie surowych bajtów tabeli
get_table_bytes(tag) zwraca surowe bajty dowolnej tabeli OpenType. Użyj get_blob(tag) dla wariantu bezpiecznego względem None, który zwraca None, gdy tabela jest nieobecna:
TtfFont udostępnia dwie metody dostępu do surowej tabeli:
get_table_bytes(tag) -> bytes— zwraca surowe bajty nazwanej tabeli (rzuca wyjątek, jeśli nieobecna)get_blob(tag) -> bytes | None— zwracaNone, jeśli tabela jest nieobecna (wariant bezpieczny)
Obie metody akceptują czteroznakowy znacznik tabeli OpenType, taki jak "cmap", "GDEF" lub "GPOS". Użyj get_blob, gdy tabela jest opcjonalna, aby móc sprawdzić None przed przetwarzaniem.
Pary kerningu
get_kern_pairs() zwraca wszystkie pary kerningu zakodowane w czcionce. Każdy KernPair posiada left (GlyphId), right (GlyphId) oraz value (int w jednostkach czcionki):
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
pairs = loaded.get_kern_pairs()
print(f"Kern pairs: {len(pairs)}")
for pair in pairs[:5]:
print(f" Left: {pair.left} Right: {pair.right} Value: {pair.value}")
Metryki czcionki
Standardowe metryki są dostępne poprzez właściwość metrics:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
metrics = loaded.metrics
print(f"Units per em : {metrics.units_per_em}")
print(f"Ascender : {metrics.ascender}")
print(f"Descender : {metrics.descender}")
print(f"Line gap : {metrics.line_gap}")
print(f"Underline pos : {metrics.underline_position}")
Obsługa czcionek zmiennych
Dla czcionek zmiennych, TtfFont udostępnia is_variable, variable_axes i named_instances. Użyj get_axis(tag), aby pobrać konkretną oś według jej czteroznakowego znacznika:
from aspose_font import FontLoader
loaded = FontLoader.open("fonts/RobotoFlex.ttf")
print(f"Is variable: {loaded.is_variable}")
print(f"Axes : {len(loaded.variable_axes)}")
Metoda get_axis(tag) w TtfFont pobiera VariableAxis według jego czteroznakowego znacznika (np. "wght" dla wagi, "wdth" dla szerokości). Zwraca None, jeśli oś nie jest obecna w tabeli fvar czcionki.
Konwertowanie czcionek
to_bytes(font_type) konwertuje czcionkę na inny format. Użyj wyliczenia FontType, aby określić docelowy:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("fonts/Roboto-Regular.ttf")
ttf_bytes = loaded.to_bytes(FontType.TTF)
with open("output/Roboto-copy.ttf", "wb") as fh:
fh.write(ttf_bytes)
print(f"Serialized: {len(ttf_bytes)} bytes")
Szybki start
Zainstaluj bibliotekę:
.venv/bin/pip install aspose-font
Wczytaj czcionkę TTF i sprawdź ją:
from aspose_font import FontLoader, FontType
loaded = FontLoader.open("Roboto-Regular.ttf")
print(f"Font name : {loaded.font_name}")
print(f"Family : {loaded.font_family}")
print(f"Glyphs : {loaded.num_glyphs}")
print(f"Variable : {loaded.is_variable}")
metrics = loaded.metrics
print(f"UPM : {metrics.units_per_em}")
ttf_bytes = loaded.to_bytes(FontType.TTF)
print(f"Serialized: {len(ttf_bytes)} bytes")
Obsługiwane formaty
| Format | Rozszerzenie | Odczyt | Zapis |
|---|---|---|---|
| TTF | .ttf | ✓ | — |
| OTF | .otf | ✓ | — |
| EOT | .eot | ✓ | — |
| CFF | .cff | ✓ | — |
| TYPE1 | .pfb/.pfa | ✓ | — |
| WOFF | .woff | ✓ | — |
| WOFF2 | .woff2 | ✓ | — |
Wszystkie formaty są ładowane przez FontLoader.open. Czcionki TTF/OTF zwracają instancję TtfFont.
Open Source & Licencjonowanie
Aspose.Font FOSS dla Python jest wydany na licencji MIT. Możesz go używać w projektach prywatnych, komercyjnych i open-source bez żadnych kosztów. Kod źródłowy jest dostępny na GitHub, a pakiet jest dystrybuowany przez PyPI jako aspose-font.