WOFF 글꼴을 Python에서 작업하는 방법
이 가이드는 Python용 Aspose.Font FOSS를 사용하여 WOFF 및 WOFF2 웹 글꼴을 로드하고, 검사하고, 변환하는 방법을 보여줍니다. WOFF(Web Open Font Format)는 웹에서 글꼴을 제공하기 위한 표준입니다. WOFF 1은 zlib 압축을 사용하고 WOFF 2는 Brotli 압축을 사용하며, 둘 다 기본 TrueType 또는 CFF 글꼴을 래핑합니다. Aspose.Font FOSS는 두 형식을 모두 로드하고 깨끗한 API을 통해 내부 글꼴 데이터를 노출합니다.
단계별 가이드
1단계: 패키지 설치
아래 명령을 사용하여 Aspose.Font FOSS 패키지를 설치합니다:
git clone https://github.com/aspose-font-foss/Aspose.Font-FOSS-for-Python.git
cd Aspose.Font-FOSS-for-Python
pip install -e .2단계: 필요한 클래스 가져오기
WOFF 글꼴을 로드하고 변환하려면 FontLoader, FontConverter, 및 FontType를 가져오세요:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType단계 3: WOFF 글꼴 로드 및 검사
FontLoader.open()를 사용하여 WOFF 파일을 로드하고 이름, 패밀리, 글리프 수와 같은 기본 속성을 읽으세요:
from aspose_font import FontLoader
woff_font = FontLoader.open("MyFont.woff")
print(f"Name: {woff_font.font_name}")
print(f"Family: {woff_font.font_family}")
print(f"Glyphs: {woff_font.num_glyphs}")
print(f"Type: {woff_font.font_type}")단계 4: WOFF 메타데이터 읽기
WOFF 파일에는 라이선스, 크레딧 및 설명이 포함된 XML 메타데이터 블록이 있을 수 있습니다. metadata_xml 속성을 통해 접근하세요.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF fonts may include an XML metadata block
xml = getattr(font, "metadata_xml", None)
if xml:
print(xml)
else:
print("No metadata in this WOFF file")단계 5: 내부 TTF 테이블 접근
WoffFont와 Woff2Font 모두 기본 TtfFont을 제공하는 inner_font 속성을 노출합니다. 이를 통해 모든 표준 OpenType 테이블에 접근할 수 있습니다.
from aspose_font import FontLoader
font = FontLoader.open("MyFont.woff")
# WOFF wraps a TrueType font; access its tables via inner_font
inner = getattr(font, "inner_font")
tables = inner.ttf_tables
print(f"Units/em: {tables.head.units_per_em}")
print(f"Family name: {tables.name.best_name(1)}")단계 6: TTF를 WOFF로 변환
TTF 폰트를 로드하고 FontType.WOFF을(를) FontConverter.convert()에 전달하여 WOFF 형식으로 변환합니다:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff_font = FontConverter.convert(ttf_font, FontType.WOFF)
woff_bytes = woff_font.to_bytes()
from pathlib import Path
Path("MyFont.woff").write_bytes(woff_bytes)단계 7: TTF를 WOFF2로 변환
TTF 폰트를 로드하고 FontType.WOFF2을(를) FontConverter.convert()에 전달하여 WOFF2 형식으로 변환합니다:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
ttf_font = FontLoader.open("MyFont.ttf")
woff2_font = FontConverter.convert(ttf_font, FontType.WOFF2)
woff2_bytes = woff2_font.to_bytes()
from pathlib import Path
Path("MyFont.woff2").write_bytes(woff2_bytes)단계 8: WOFF와 WOFF2 간 변환
로드된 WOFF 파일을 WOFF2(또는 그 반대로)로 변환하려면 대상 FontType을(를) FontConverter.convert()에 전달합니다:
from aspose_font import FontLoader
from aspose_font.converter import FontConverter # internal API — may change between releases
from aspose_font import FontType
# WOFF -> WOFF2
woff_font = FontLoader.open("MyFont.woff")
woff2_font = FontConverter.convert(woff_font, FontType.WOFF2)
# WOFF2 -> WOFF
woff2_font = FontLoader.open("MyFont.woff2")
woff_font = FontConverter.convert(woff2_font, FontType.WOFF)일반적인 문제 및 해결책
FontParseException: Invalid WOFF signature — 파일이 유효한 WOFF 폰트가 아닙니다. 파일이 손상되지 않았으며 WOFF 매직 바이트로 시작하는지 확인하십시오.
FontParseException: WOFF table decompression failed — WOFF 파일 내부의 압축된 테이블이 손상되었습니다. 폰트 파일을 다시 다운로드해 보세요.
큰 WOFF2 출력 — WOFF2는 Brotli 압축을 사용하여 WOFF 1(zlib)보다 더 작은 파일을 생성합니다. WOFF2 출력이 예상보다 크게 나오는 경우, 최적화된 TTF 소스에서 시작했는지 확인하십시오.
자주 묻는 질문
WOFF와 WOFF2의 차이점은 무엇인가요?
WOFF 1은 zlib 압축을 사용하고 WOFF 2는 Brotli 압축을 사용합니다. WOFF2는 일반적으로 WOFF 1보다 20-30% 더 나은 압축률을 제공합니다. 두 형식 모두 동일한 기본 TrueType 또는 CFF 글꼴 데이터를 래핑합니다.
WOFF 파일에서 폰트 테이블에 접근할 수 있나요?
예. inner_font 속성을 사용하여 기본 TtfFont을(를) 얻은 다음, inner_font.ttf_tables를 통해 테이블에 액세스합니다.
이 라이브러리는 WOFF 메타데이터를 지원합니까?
예. WoffFont와 Woff2Font 모두 선택적 XML 메타데이터 블록을 포함하는 metadata_xml 속성을 노출합니다.