Cara Bekerja dengan Font WOFF di Python
Panduan ini menunjukkan cara memuat, memeriksa, dan mengonversi font web WOFF dan WOFF2 menggunakan Aspose.Font FOSS untuk Python. WOFF (Web Open Font Format) adalah standar untuk menyajikan font di web. WOFF 1 menggunakan kompresi zlib dan WOFF 2 menggunakan kompresi Brotli, keduanya membungkus font TrueType atau CFF yang mendasarinya. Aspose.Font FOSS memuat kedua format dan mengekspos data font internal melalui API yang bersih.
Panduan Langkah-demi-Langkah
Langkah 1: Instal Paket
Instal paket Aspose.Font FOSS menggunakan perintah di bawah ini:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .Langkah 2: Impor Kelas yang Diperlukan
Impor FontLoader, FontConverter, dan FontType untuk memuat dan mengonversi font WOFF:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontTypeLangkah 3: Muat dan Periksa Font WOFF
Muat file WOFF dengan FontLoader.open() dan baca properti dasar seperti nama, keluarga, dan jumlah glif:
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}")Langkah 4: Baca Metadata WOFF
File WOFF mungkin berisi blok metadata XML dengan lisensi, kredit, dan deskripsi. Akses itu melalui properti 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")Langkah 5: Akses Tabel TTF Internal
Baik WoffFont maupun Woff2Font mengekspos properti inner_font yang memberikan TtfFont yang mendasarinya. Melalui properti itu Anda dapat mengakses semua tabel OpenType standar.
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)}")Langkah 6: Konversi TTF ke WOFF
Muat font TTF dan konversi ke format WOFF dengan mengirim FontType.WOFF ke 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)Langkah 7: Konversi TTF ke WOFF2
Muat font TTF dan konversi ke format WOFF2 dengan mengirim FontType.WOFF2 ke 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)Langkah 8: Konversi Antara WOFF dan WOFF2
Konversi file WOFF yang dimuat ke WOFF2 (atau sebaliknya) dengan mengirim target FontType ke 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)Masalah Umum dan Solusinya
FontParseException: Invalid WOFF signature — File tidak merupakan font WOFF yang valid. Pastikan file tidak rusak dan dimulai dengan byte magis WOFF.
FontParseException: WOFF table decompression failed — Tabel terkompresi di dalam file WOFF rusak. Coba unduh ulang file font.
Output WOFF2 besar — WOFF2 menggunakan kompresi Brotli yang menghasilkan file lebih kecil dibandingkan WOFF 1 (zlib). Jika output WOFF2 Anda secara tidak terduga besar, pastikan Anda memulai dari sumber TTF yang telah dioptimalkan.
Pertanyaan yang Sering Diajukan
Apa perbedaan antara WOFF dan WOFF2?
WOFF 1 menggunakan kompresi zlib dan WOFF 2 menggunakan kompresi Brotli. WOFF2 biasanya mencapai kompresi 20-30% lebih baik dibandingkan WOFF 1. Kedua-nya membungkus data font TrueType atau CFF yang mendasarinya.
Bisakah saya mengakses tabel font dari file WOFF?
Ya. Gunakan properti inner_font untuk mendapatkan TtfFont yang mendasari, kemudian akses tabel melalui inner_font.ttf_tables.
Apakah perpustakaan ini mendukung metadata WOFF?
Ya. Baik WoffFont maupun Woff2Font mengekspos properti metadata_xml yang berisi blok metadata XML opsional.