Com treballar amb fonts WOFF en Python

Com treballar amb fonts WOFF en Python

Aquesta guia mostra com carregar, inspeccionar i convertir fonts web WOFF i WOff2 utilitzant Aspose.Font FOSS per Python. WOF (Web Open Font Format) és l’estàndard per a lliurar fonts en la xarxa. Wof 1 usa compressió zlib i wof 2 fa servir compressió de Brotli, ambdues envoltant una font subjacent TrueType o CFF. WofAspose.Font Carrega tots dos formats i exposa les dades internes de la lletra mitjançant una API neta.

Guia de pas a pas

Pas 1: Instal·la el paquet

Instal·lar el paquet FOSS de PyPI utilitzant l’ordre pip a continuació:

pip install "aspose-font>=1.0.0"

Pas 2: Import de les classes necessàries

Import FontLoader, FontConverter, i FontType per carregar i convertir fonts WOFF:

from aspose_font.loader import FontLoader
from aspose_font.converter import FontConverter
from aspose_font import FontType

Pas 3: Carregar i inspeccionar una font WOFF

Carregar un fitxer WOFF amb FontLoader.open() i llegir propietats bàsiques com el nom, la família i el nombre d’glifs:

from aspose_font.loader 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}")

Pas 4: Llegir metadades WOFF

Els fitxers WOFF poden contenir un bloc de metadades XML amb llicències, crèdits i Accedir-hi a través de la pàgina web del programa. metadata_xml propietat.

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”)


### Pas 5: Accedir a les taules TTF internes

Both `WoffFont` i de la `Woff2Font` exposa una `inner_font` propietat que dóna tu el subjacent `TtfFont`.A través d'ella pots accedir a tots els estàndards. Taules OpenType.

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)}")

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Copy code”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

Pas 6: Convertir TTF en WOFF

Carregar una font TTF i convertir-la en format WOFF passant el text de la pàgina d’enviament. FontType.WOFF a la FontConverter.convert():

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)


### Pas 7: Convertir TTF en WOFF2

Carregar una font TTF i convertir-la al format WOFF2 passant el text de la part següent: `FontType.WOFF2` a la `FontConverter.convert()`:

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)

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Copy code”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

Pas 8: Convertir entre WOFF i WOff2

Convertir un fitxer WOFF carregat en WOff2 (o viceversa) passant el objectiu FontType a la FontConverter.convert():

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)

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Copy code”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

Problemes comuns i fixos

FontParseException: Invalid WOFF signature El fitxer no és un WOFF vàlid. Verifica que el fitxer no està corromput i comença amb els bytes màgics WOFF.

FontParseException: WOFF table decompression failed Una taula comprimida. Intentar tornar a descarregar el fitxer de font.

Gran sortida WOFF2 WOFF2 utilitza la compressió de Brotli que produeix una quantitat més petita d’energia. Si la sortida de WOFF2 és inesperadament gran, assegureu-vos que el seu sistema d’impressió no es trobi en un format més petit. estàs començant d’una font TTF optimitzada.

Preguntes freqüents

Quina és la diferència entre WOFF i WOff2?

WOFF 1 utilitza la compressió zlib i WOff 2 utilitzeix la compressió Brotli. WOF2 normalment aconsegueix una compressión 20-30% millor que WOFC 1. Ambdues envolten les mateixes dades de font subjacent TrueType o CFF.

Puc accedir a les taules de fonts des d’un arxiu WOFF?

Sí, utilitza el… inner_font propietat per obtenir el subjacent TtfFont, llavors Taules d’accés via inner_font.ttf_tables.

La biblioteca dóna suport a les metadades WOFF?

Sí, ambdues. WoffFont i de la Woff2Font exposa una metadata_xml propietat contenent el bloc de metadades XML opcional.

See Also

 Català