Manajemen Font Inti
Manajemen Font Inti
Panduan ini menunjukkan cara memuat font dari jalur file atau array byte, membaca properti metadata, memetakan poin kode Unicode ke ID glyph, mengambil glyph, dan bekerja dengan sumbu font variabel serta instance bernama.
FontLoader adalah titik masuk utama untuk semua operasi pemuatan font. Setelah sebuah font dimuat, kelas dasar Font memberikan akses ke metadata, enkoding, akses glyph, dan metrik tanpa memerlukan parsing tabel biner.
Memuat Font
FontLoader.open(source, font_type, collection_index) memuat font dari jalur file dengan deteksi format otomatis. FontLoader.load(source, font_type, collection_index) menerima byte mentah untuk alur kerja in-memory atau jaringan.
from aspose_font import FontLoader
# From a file path — format auto-detected
font = FontLoader.open("Roboto-Regular.ttf")
# From raw bytes — useful for in-memory or network workflows
with open("OpenSans-Regular.otf", "rb") as f:
font = FontLoader.load(f.read())Membaca Metadata Font
Setelah dimuat, objek Font menampilkan properti font_name, font_family, font_style, dan num_glyphs untuk inspeksi cepat tanpa parsing tabel manual.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.ttf")
print(font.font_name) # full PostScript name
print(font.font_family) # family name
print(font.font_style) # style name e.g. "Regular", "Bold"
print(font.num_glyphs) # total glyph countPengkodean Glif
FontEncoding memetakan titik kode Unicode ke ID glif. Gunakan unicode_to_gid(cp) untuk menyelesaikan satu titik kode, atau get_all_codepoints() untuk mendaftar setiap titik kode yang dipetakan dalam font.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
# Map a single code point
gid = font.encoding.unicode_to_gid(0x41) # GID for 'A'
# Enumerate all mapped code points
all_cps = font.encoding.get_all_codepoints()
print(f"Font covers {len(all_cps)} Unicode code points")Akses Glif
GlyphAccessor mengambil objek glif berdasarkan ID, Unicode, atau string teks.
from aspose_font import FontLoader
font = FontLoader.open("OpenSans-Regular.otf")
glyph = font.glyph_accessor.get_glyph_by_id(gid)
glyph_a = font.glyph_accessor.get_glyph_by_unicode(0x41)
glyphs = font.glyph_accessor.get_glyphs_for_text("Hello")
all_ids = font.glyph_accessor.get_all_glyph_ids()Font Variabel
Untuk font variabel (yang mengandung tabel fvar), TtfFont menampilkan definisi sumbu dan instance bernama secara langsung.
from aspose_font import FontLoader
from aspose_font import TtfFont
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
ttf: TtfFont = loaded.font
# Check if the font is variable
if ttf.is_variable:
# List all variation axes
for axis in ttf.variable_axes:
print(f"{axis.tag} range: {axis.min_value}..{axis.max_value} default: {axis.default_value}")
# Look up a single axis by tag
wght = ttf.get_axis("wght")
if wght:
print(f"Weight axis: {wght.min_value}..{wght.max_value}")
# Enumerate named instances (e.g. Bold, Condensed)
for inst in ttf.named_instances:
print(f"Instance: name_id={inst.name_id} coordinates={inst.coordinates}")Untuk alur kerja instansi tingkat lebih tinggi, SmartInstancer membungkus enumerasi sumbu dan resolusi instance bernama dalam satu objek:
from aspose_font import FontLoader
from aspose_font import SmartInstancer
loaded = FontLoader.load("Roboto-VariableFont_wdth,wght.ttf")
instancer = SmartInstancer(loaded.font)
print(f"Axes: {[a.tag for a in instancer.axes]}")
print(f"Named instances: {len(instancer.named_instances)}")Tips dan Praktik Terbaik
- Cache objek
Fontyang dimuat saat memproses berkas font yang sama berkali-kali - Gunakan
FontLoader.load(bytes)untuk alur kerja jaringan atau basis data guna menghindari file sementara - Periksa
num_glyphssebelum melakukan subsetting untuk memperkirakan cakupan setelah subsetting get_all_glyph_ids()berguna untuk iterasi seluruh set glif
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
UnsupportedFontFormatException | Format file tidak dikenali | Verifikasi bahwa file adalah TTF/OTF/CFF/WOFF/WOFF2/EOT/Type1 yang valid |
FontParseException | Data biner rusak | Validasi file font dengan linter sebelum memuat |
GlyphNotFoundException | GID di luar jangkauan | Periksa num_glyphs sebelum mengakses berdasarkan ID |
FAQ
Apakah FontLoader mendukung WOFF2?
Ya. FontLoader.open() dan FontLoader.load() keduanya menerima file WOFF2 dan secara otomatis mendeteksi formatnya.
Bisakah saya memuat font dari URL?
Tidak secara langsung. Unduh byte font dengan urllib atau requests dan berikan ke FontLoader.load(bytes).
Apakah pemuatan thread-safe?
Setiap panggilan FontLoader.open() mengembalikan objek Font yang independen. Panggilan bersamaan pada objek terpisah aman.
Ringkasan API Reference
| Kelas / Metode | Deskripsi |
|---|---|
FontLoader.open(path) | Muat font dari jalur file |
FontLoader.load(data) | Muat font dari byte mentah |
Font.font_name | Nama font PostScript lengkap |
Font.font_family | Nama keluarga font |
Font.font_style | Nama gaya font |
Font.num_glyphs | Jumlah glyph total |
FontEncoding.unicode_to_gid(cp) | Petakan titik kode Unicode ke ID glif |
FontEncoding.get_all_codepoints() | Semua titik kode Unicode dengan pemetaan glyph |
GlyphAccessor.get_glyph_by_id(gid) | Ambil glyph berdasarkan ID |
GlyphAccessor.get_glyph_by_unicode(cp) | Ambil glyph berdasarkan titik kode Unicode |
GlyphAccessor.get_glyphs_for_text(text) | Ambil glyphs untuk string teks |
GlyphAccessor.get_all_glyph_ids() | Daftar semua ID glif dalam font |
TtfFont.is_variable | Apakah font berisi data font variabel |
TtfFont.variable_axes | Daftar objek VariableAxis untuk setiap sumbu variasi |
TtfFont.get_axis(tag) | Cari satu sumbu berdasarkan tag empat karakternya |
TtfFont.named_instances | Instansi bernama yang didefinisikan dalam tabel fvar font |
SmartInstancer(font) | Pembantu tingkat tinggi yang membungkus kueri axis dan instance |