Bagaimana Aspose.Font Menggunakan Kompresi Brotli untuk WOFF2 di Python

Bagaimana Aspose.Font Menggunakan Kompresi Brotli untuk WOFF2 di Python

WOFF2 (Web Open Font Format 2) mengompresi data glifnya menggunakan Brotli, algoritma kompresi lossless serbaguna yang dikembangkan oleh Google. Aspose.Font FOSS untuk Python menangani semua operasi Brotli secara internal — Anda tidak perlu menginstal perpustakaan kompresi eksternal. Kelas BrotliEncoder dan BrotliDecoder yang disertakan tersedia untuk penggunaan tingkat rendah ketika Anda perlu mengompresi atau mendekompresi data arbitrer di luar jalur konversi WOFF2 standar.

Panduan Langkah-demi-Langkah

Langkah 1: Instal Paket

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

Untuk operasi WOFF2 standar:

from aspose_font import FontLoader
from aspose_font.converter import FontConverter  # internal API — may change between releases
from aspose_font import FontType

Untuk operasi Brotli tingkat rendah (internal API — dapat berubah antara rilis):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

Langkah 3: Buat Font WOFF2 (Brotli-Compressed)

Jalur standar: konversi font apa pun ke WOFF2. Kompresi Brotli diterapkan secara otomatis.

from aspose_font import FontLoader
from aspose_font.converter import FontConverter  # internal API — may change between releases
from aspose_font import FontType
from pathlib import Path

# Load a TTF or WOFF source
source = FontLoader.open("MyFont.ttf")

# Convert to WOFF2 — Brotli compression is applied internally
woff2 = FontConverter.convert(source, FontType.WOFF2)
output_bytes = woff2.to_bytes(FontType.WOFF2)

Path("MyFont.woff2").write_bytes(output_bytes)
print(f"WOFF2 size: {len(output_bytes)} bytes")

Tidak ada langkah tambahan yang diperlukan untuk kompresi. Perpustakaan memanggil BrotliEncoder secara internal saat menghasilkan output WOFF2.

Langkah 4: Muat dan Verifikasi Font WOFF2

Saat memuat file .woff2, perpustakaan secara otomatis mendekompresi data glyph yang dikompresi dengan Brotli sebelum menampilkan properti font:

from aspose_font import FontLoader

woff2 = FontLoader.open("MyFont.woff2")
print(f"Name   : {woff2.font_name}")
print(f"Family : {woff2.font_family}")
print(f"Glyphs : {woff2.num_glyphs}")
print(f"Type   : {woff2.font_type}")

FontLoader.open mendeteksi byte magis WOFF2 dan memanggil BrotliDecoder untuk mendekompresi aliran glyph sebelum membangun instance Woff2Font.

Langkah 5: Pengkodean Brotli Tingkat Rendah

Internal API: BrotliEncoder and BrotliDecoder adalah utilitas internal yang dapat berubah antar rilis. Untuk kompresi font WOFF2, gunakan API publik yang ditunjukkan pada Langkah 3-4 di atas.

Gunakan BrotliEncoder secara langsung ketika Anda perlu mengompresi data biner arbitrer dengan Brotli. Parameter quality (0–11) mengontrol tingkat kompresi:

from aspose_font._brotli import BrotliEncoder  # internal API

data = b"Hello, Brotli!" * 100  # Sample data to compress

encoder = BrotliEncoder(quality=11)  # quality 11 = maximum compression
compressed = encoder.encode(data)

print(f"Original : {len(data)} bytes")
print(f"Compressed: {len(compressed)} bytes")
print(f"Ratio    : {len(compressed)/len(data):.2%}")

Kualitas 11 memberikan rasio kompresi terbaik dengan mengorbankan kecepatan enkoding. Kualitas 0 paling cepat. Untuk data font dalam output WOFF2, perpustakaan menggunakan tingkat kualitas default.

Langkah 6: Dekoding Brotli Tingkat Rendah

Gunakan BrotliDecoder.decode untuk mendekompresi data yang dikompresi dengan Brotli:

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

original = b"Hello, Brotli!" * 100

# Compress
encoder = BrotliEncoder(quality=6)
compressed = encoder.encode(original)

# Decompress
decoded = BrotliDecoder.decode(compressed)

assert decoded == original
print(f"Decoded {len(decoded)} bytes — matches original: {decoded == original}")

BrotliDecoder.decode adalah metode kelas yang menerima byte terkompresi dan mengembalikan byte yang telah didekompresi. Tidak ada API streaming — payload terkompresi penuh harus disediakan dalam satu panggilan.

Kapan Menggunakan API Brotli Tingkat Rendah

Kelas BrotliEncoder dan BrotliDecoder berguna ketika:

  • Anda perlu mengompresi atau mendekompresi payload biner arbitrer secara terpisah dari pemrosesan font (misalnya, mengompresi metadata font atau blok data khusus).
  • Anda perlu memvalidasi terlebih dahulu bahwa payload yang dikompresi dengan Brotli terbentuk dengan baik sebelum diteruskan ke parser WOFF2.
  • Anda sedang membuat fixture pengujian yang memerlukan data dengan rasio kompresi yang diketahui.

Untuk semua operasi font standar (memuat, mengonversi, menyimpan WOFF2), Anda tidak memerlukan API tingkat rendah — FontLoader.open dan FontConverter.convert menangani Brotli secara transparan.

Pertanyaan yang Sering Diajukan

Apakah perpustakaan memerlukan paket brotli eksternal?

Tidak. Aspose.Font FOSS untuk Python menyertakan implementasi Brotli sendiri. Tidak diperlukan brotli, brotlicffi, atau paket serupa.

Kualitas kompresi apa yang digunakan perpustakaan untuk WOFF2?

Perpustakaan menggunakan tingkat kualitas default untuk output WOFF2. Untuk mengontrol tingkat kualitas pada tugas kompresi khusus, gunakan BrotliEncoder(quality=N) di mana N berada di antara 0 (tercepat) dan 11 (kompresi terbaik).

Apakah saya dapat mendekompresi aliran glif WOFF2 secara langsung?

Data glif WOFF2 menggunakan kombinasi dekompresi Brotli dan transformasi khusus font (format tabel “transformed”). Mendekompresi aliran Brotli mentah saja tidak cukup untuk memperoleh font yang dapat digunakan — Anda harus memuat file WOFF2 melalui FontLoader.open, yang menerapkan baik dekompresi Brotli maupun transformasi tabel invers.

Lihat Juga

 Bahasa Indonesia