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 count

Pengkodean 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 Font yang 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_glyphs sebelum melakukan subsetting untuk memperkirakan cakupan setelah subsetting
  • get_all_glyph_ids() berguna untuk iterasi seluruh set glif

Masalah Umum

MasalahPenyebabPerbaikan
UnsupportedFontFormatExceptionFormat file tidak dikenaliVerifikasi bahwa file adalah TTF/OTF/CFF/WOFF/WOFF2/EOT/Type1 yang valid
FontParseExceptionData biner rusakValidasi file font dengan linter sebelum memuat
GlyphNotFoundExceptionGID di luar jangkauanPeriksa 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 / MetodeDeskripsi
FontLoader.open(path)Muat font dari jalur file
FontLoader.load(data)Muat font dari byte mentah
Font.font_nameNama font PostScript lengkap
Font.font_familyNama keluarga font
Font.font_styleNama gaya font
Font.num_glyphsJumlah 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_variableApakah font berisi data font variabel
TtfFont.variable_axesDaftar objek VariableAxis untuk setiap sumbu variasi
TtfFont.get_axis(tag)Cari satu sumbu berdasarkan tag empat karakternya
TtfFont.named_instancesInstansi bernama yang didefinisikan dalam tabel fvar font
SmartInstancer(font)Pembantu tingkat tinggi yang membungkus kueri axis dan instance

Lihat Juga

 Bahasa Indonesia