Cách Aspose.Font Sử dụng Nén Brotli cho WOFF2 trong Python

Cách Aspose.Font Sử dụng Nén Brotli cho WOFF2 trong Python

WOFF2 (Web Open Font Format 2) nén dữ liệu glyph của nó bằng Brotli, một thuật toán nén không mất dữ liệu đa mục đích được Google phát triển. Aspose.Font FOSS cho Python xử lý tất cả các thao tác Brotli nội bộ — bạn không cần cài đặt bất kỳ thư viện nén bên ngoài nào. Các lớp BrotliEncoder và BrotliDecoder được đóng gói có sẵn để sử dụng ở mức thấp khi bạn cần nén hoặc giải nén dữ liệu tùy ý ngoài đường chuyển đổi WOFF2 tiêu chuẩn.

Hướng Dẫn Từng Bước

Bước 1: Cài Đặt Gói

git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .

Bước 2: Nhập Các Lớp Cần Thiết

Đối với các thao tác WOFF2 tiêu chuẩn:

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

Đối với các thao tác Brotli cấp thấp (internal API — có thể thay đổi giữa các phiên bản):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

Bước 3: Tạo phông chữ WOFF2 (được nén bằng Brotli)

Quy trình tiêu chuẩn: chuyển đổi bất kỳ phông chữ nào sang WOFF2. Nén Brotli được áp dụng tự động.

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

Không cần bước bổ sung nào cho việc nén. Thư viện gọi BrotliEncoder nội bộ khi tạo ra đầu ra WOFF2.

Bước 4: Tải và xác minh phông chữ WOFF2

Khi tải tệp .woff2, thư viện tự động giải nén dữ liệu glyph đã được nén bằng Brotli trước khi hiển thị các thuộc tính của phông chữ:

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 phát hiện các byte ma thuật WOFF2 và gọi BrotliDecoder để giải nén luồng glyph trước khi tạo ra thể hiện Woff2Font.

Bước 5: Mã hoá Brotli cấp thấp

Nội bộ API: BrotliEncoder and BrotliDecoder là các tiện ích nội bộ có thể thay đổi giữa các phiên bản. Đối với việc nén phông chữ WOFF2, nên ưu tiên API công cộng được hiển thị trong Các bước 3-4 ở trên.

Sử dụng BrotliEncoder trực tiếp khi bạn cần nén dữ liệu nhị phân tùy ý bằng Brotli. Tham số quality (0–11) điều khiển mức độ nén:

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

Chất lượng 11 cho tỷ lệ nén tốt nhất nhưng đổi lại tốc độ mã hoá chậm hơn. Chất lượng 0 là nhanh nhất. Đối với dữ liệu phông chữ trong đầu ra WOFF2, thư viện sử dụng mức chất lượng mặc định.

Bước 6: Giải mã Brotli cấp thấp

Sử dụng BrotliDecoder.decode để giải nén dữ liệu đã được nén bằng 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 là một phương thức lớp nhận các byte đã nén và trả về các byte đã giải nén. Không có API dạng streaming — toàn bộ tải trọng đã nén phải được cung cấp trong một lần gọi.

Khi nào nên sử dụng API Brotli cấp thấp

Các lớp BrotliEncoder và BrotliDecoder hữu ích khi:

  • Bạn cần nén hoặc giải nén các tải trọng nhị phân tùy ý mà không phụ thuộc vào việc xử lý phông chữ (ví dụ, nén siêu dữ liệu phông chữ hoặc các khối dữ liệu tùy chỉnh).
  • Bạn cần xác thực trước rằng tải trọng đã được nén bằng Brotli có định dạng đúng trước khi chuyển nó cho bộ phân tích WOFF2.
  • Bạn đang xây dựng một bộ kiểm thử yêu cầu dữ liệu có tỷ lệ nén đã biết.

Đối với mọi thao tác phông chữ tiêu chuẩn (tải, chuyển đổi, lưu WOFF2), bạn không cần API cấp thấp — FontLoader.open và FontConverter.convert xử lý Brotli một cách trong suốt.

Câu hỏi thường gặp

Thư viện có yêu cầu gói brotli bên ngoài không?

Không. Aspose.Font FOSS cho Python đi kèm với triển khai Brotli riêng của mình. Không cần brotli, brotlicffi, hoặc gói tương tự nào.

Thư viện sử dụng mức chất lượng nén nào cho WOFF2?

Thư viện sử dụng mức chất lượng mặc định cho đầu ra WOFF2. Để kiểm soát mức chất lượng cho các tác vụ nén tùy chỉnh, sử dụng BrotliEncoder(quality=N) trong đó N nằm trong khoảng từ 0 (nhanh nhất) đến 11 (nén tốt nhất).

Có thể giải nén luồng glyph WOFF2 trực tiếp không?

Dữ liệu glyph WOFF2 sử dụng sự kết hợp của giải nén Brotli và một phép biến đổi đặc thù cho phông chữ (định dạng bảng “transformed”). Việc chỉ giải nén luồng Brotli thô không đủ để khôi phục một phông chữ có thể sử dụng — bạn phải tải tệp WOFF2 qua FontLoader.open, công cụ này sẽ áp dụng cả giải nén Brotli và phép biến đổi bảng ngược lại.

Xem thêm

 Tiếng Việt