Skip to content

FontTools

A library to manipulate font files from Python

FontTools는 글꼴 파일을 조작하기 위한 오픈 소스 라이브러리로, 파이썬으로 작성되었습니다.

이 라이브러리는 TrueType, OpenType, AFM, 기타 많은 글꼴 형식을 지원하며, 글꼴의 분석, 수정, 생성 및 변환 작업을 위해 광범위하게 사용됩니다.

FontTools는 특히 글꼴 엔지니어링과 웹 글꼴 최적화 과정에서 필수적인 도구로 자리 잡고 있습니다.

주요 기능

  • 다양한 글꼴 형식 지원: TrueType, OpenType, AFM 등 다양한 글꼴 파일 형식을 처리할 수 있습니다.
  • 글꼴 서브셋 생성: 필요한 글리프만 포함하는 서브셋 글꼴 파일을 생성하여 파일 크기를 최적화할 수 있습니다.
  • TTF/OTF 변환: TrueType과 OpenType 글꼴 간 변환이 가능합니다.
  • XML 기반 글꼴 수정: 글꼴 데이터를 XML로 추출하고, 수정 후 다시 글꼴 파일로 컴파일할 수 있습니다.
  • 글리프 데이터 조작: 글리프의 형태나 메타데이터를 직접 수정할 수 있습니다.

Install

pip install fonttools

글리프 정보 추출

다음은 FontTools를 사용하여 글꼴 파일에서 특정 글리프의 정보를 추출하는 예제 코드입니다.

from fontTools.ttLib import TTFont

# Arial 폰트의 'A'와 맑은 고딕의 '가' 글리프 정보 출력
for font_name, sample_glyph in [('arial', 'A'), ('malgun', 'uniAC00')]:
    # 글리프의 정보 출력
    font = TTFont(rf'C:\Windows\Fonts\{font_name}.ttf')
    glyph = font['glyf'].get(sample_glyph)

    print(f"{font_name=}, {sample_glyph=}")
    print(f" 글리프 좌표 정보: {glyph.coordinates}")
    print(f" 윤곽선 수: {glyph.numberOfContours}\n")

    # 글꼴 파일 닫기
    font.close()

유니코드 캐릭터 맵핑 확인하기

from fontTools.ttLib import TTFont

# TTF 파일 읽기
font_path = "NanumGothicCoding-Bold.ttf"
font = TTFont(font_path)

# 글리프 이름 가져오기
glyph_names = font.getGlyphOrder()

# 글리프 개수 출력
print("Total glyphs:", len(glyph_names))

# 글리프 목록 출력 (매우 많음)
# print("Glyph names:", glyph_names)

# cmap 테이블에서 유니코드 맵핑 확인
unicode_map = font['cmap'].getBestCmap()

# 유니코드와 글리프 이름 쌍 출력
for codepoint, glyph_name in unicode_map.items():
    print(f"U+{codepoint:04X}: {glyph_name}")

cmap (Character Map) Table

cmap(Character Map) 테이블은 TrueType 및 OpenType 폰트 파일에서 각 유니코드 코드포인트와 글리프(글자 모양) 간의 매핑 정보를 저장하는 테이블입니다.

이 매핑 정보는 텍스트 데이터를 화면에 올바르게 렌더링하는 데 필수적입니다. 즉, 특정 유니코드 코드포인트가 주어졌을 때 폰트가 해당 문자를 어떻게 표시할지를 결정하는 데 사용됩니다.

cmap 테이블의 역할

  • 문자 코드 매핑: cmap 테이블은 폰트 파일 내의 유니코드 코드포인트(예: U+0041, U+AC00)와 실제 글리프 이름 또는 글리프 ID를 매핑합니다.
  • 글리프 렌더링: 운영체제나 애플리케이션이 특정 문자를 렌더링할 때, cmap 테이블을 참조하여 코드포인트에 해당하는 글리프를 찾아 렌더링합니다.
  • 다양한 문자 인코딩 지원: 폰트는 여러 종류의 cmap 서브테이블을 가질 수 있어, 유니코드 외에도 다양한 인코딩(예: ASCII, Shift-JIS 등)을 지원할 수 있습니다.

cmap 테이블 구조

  • cmap 테이블은 여러 개의 서브테이블로 구성되며, 각 서브테이블은 특정 문자 인코딩 형식과 매핑 방식을 나타냅니다.
  • 각 서브테이블은 매핑 방식에 따라 간단한 매핑 테이블, 범위 매핑, 포맷별 매핑(Format 4, Format 12 등)으로 구분됩니다.
    • Format 4: 가장 많이 사용되는 형식으로, BMP(Basic Multilingual Plane) 영역의 글리프를 매핑합니다.
    • Format 12: 확장된 유니코드(예: 이모지나 희귀 문자) 매핑을 지원하며, 32비트 값을 사용하여 여러 언어와 문자 집합을 포함합니다.

확인 방법

getBestCmap()은 cmap 테이블 내에서 가장 적합한 유니코드 맵핑 테이블을 찾아줍니다.

pyftsubset

OpenType font subsetter and optimizer

사용 사례

  • 웹 글꼴 최적화: 웹 페이지의 로딩 속도를 향상시키기 위해 필요한 글리프만 포함하는 글꼴 서브셋을 생성할 수 있습니다.
  • 글꼴 개발 및 테스트: 새로운 글꼴을 개발하거나 기존 글꼴을 수정할 때 유용합니다.
  • 교육 및 연구: 글꼴 구조와 글리프 데이터를 분석하고 연구하는 데 도움을 줄 수 있습니다.

See also

Favorite site

References


  1. 44BITS_-_optimization_webfont_with_pyftsubnet.pdf