Aspose.Font가 Python에서 WOFF2에 Brotli 압축을 사용하는 방법

Aspose.Font가 Python에서 WOFF2에 Brotli 압축을 사용하는 방법

WOFF2 (Web Open Font Format 2)는 Google이 개발한 범용 무손실 압축 알고리즘인 Brotli를 사용하여 글리프 데이터를 압축합니다. Aspose.Font FOSS for Python는 모든 Brotli 작업을 내부에서 처리하므로 외부 압축 라이브러리를 설치할 필요가 없습니다. 번들된 BrotliEncoder 및 BrotliDecoder 클래스는 표준 WOFF2 변환 경로 밖에서 임의 데이터를 압축하거나 해제해야 할 때 저수준으로 사용할 수 있습니다.

단계별 가이드

1단계: 패키지 설치

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

2단계: 필요한 클래스 가져오기

표준 WOFF2 작업을 위해:

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

저수준 Brotli 작업을 위해 (내부 API — 릴리즈마다 변경될 수 있음):

from aspose_font._brotli import BrotliEncoder, BrotliDecoder  # internal API

3단계: WOFF2 글꼴 만들기 (Brotli 압축됨)

표준 경로: 모든 글꼴을 WOFF2로 변환합니다. Brotli 압축이 자동으로 적용됩니다.

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

압축을 위해 추가 단계가 필요하지 않습니다. 라이브러리는 WOFF2 출력을 생성할 때 내부적으로 BrotliEncoder를 호출합니다.

4단계: WOFF2 글꼴 로드 및 검증

.woff2 파일을 로드할 때, 라이브러리는 글꼴 속성을 노출하기 전에 Brotli 압축된 글리프 데이터를 자동으로 압축 해제합니다:

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는 WOFF2 매직 바이트를 감지하고 BrotliDecoder을 호출하여 글리프 스트림을 압축 해제한 후 Woff2Font 인스턴스를 구성합니다.

5단계: 저수준 Brotli 인코딩

내부 API: BrotliEncoder and BrotliDecoder 은 내부 유틸리티이며 릴리스 간에 변경될 수 있습니다. WOFF2 폰트 압축의 경우, 위 단계 3-4에 표시된 공개 API를 선호하세요.

Brotli로 임의의 바이너리 데이터를 압축해야 할 때는 BrotliEncoder을 직접 사용하십시오. quality 매개변수(0–11)는 압축 수준을 제어합니다:

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

품질 11은 인코딩 속도를 희생하고 가장 높은 압축 비율을 제공합니다. 품질 0은 가장 빠릅니다. WOFF2 출력의 글꼴 데이터에 대해서는 라이브러리가 기본 품질 수준을 사용합니다.

Step 6: Low-Level Brotli 디코딩

Brotli 압축 데이터를 풀어내려면 BrotliDecoder.decode을 사용하십시오:

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은(는) 압축된 바이트를 받아 압축 해제된 바이트를 반환하는 클래스 메서드입니다. 스트리밍 API은(는) 없으며 전체 압축 페이로드를 한 번에 제공해야 합니다.

Low-Level Brotli API를 언제 사용해야 하는가

BrotliEncoder와 BrotliDecoder 클래스는 다음과 같은 경우에 유용합니다:

  • 글꼴 처리와 별개로 임의의 바이너리 페이로드를 압축하거나 압축 해제해야 할 때(예: 글꼴 메타데이터 또는 사용자 정의 데이터 블록 압축).
  • Brotli 압축된 페이로드가 올바른 형식인지 미리 검증한 후에 WOFF2 파서에 전달해야 할 때.
  • 알려진 압축 비율 데이터를 필요로 하는 테스트 픽스처를 구축하고 있을 때.

모든 표준 글꼴 작업(로드, 변환, WOFF2 저장)에서는 저수준 API이 필요하지 않습니다 — FontLoader.open와 FontConverter.convert가 Brotli를 투명하게 처리합니다.

자주 묻는 질문

이 라이브러리는 외부 brotli 패키지가 필요합니까?

아니요. Aspose.Font Python용 FOSS는 자체 Brotli 구현을 포함합니다. brotli, brotlicffi 또는 유사한 패키지는 필요하지 않습니다.

라이브러리는 WOFF2에 어떤 압축 품질을 사용합니까?

라이브러리는 WOFF2 출력에 기본 품질 레벨을 사용합니다. 사용자 지정 압축 작업의 품질 레벨을 제어하려면 BrotliEncoder(quality=N)을(를) 사용하십시오. 여기서 N은 0(가장 빠름)에서 11(최고 압축) 사이입니다.

WOFF2 글리프 스트림을 직접 압축 해제할 수 있나요?

WOFF2 글리프 데이터는 Brotli 압축 해제와 폰트 전용 변환(“transformed” 테이블 형식)을 결합하여 사용합니다. 순수한 Brotli 스트림만 압축을 해제해도 사용 가능한 폰트를 복구할 수 없습니다 — FontLoader.open을 통해 WOFF2 파일을 로드해야 하며, 이 과정에서 Brotli 압축 해제와 역 테이블 변환이 모두 적용됩니다.

참조

 한국어