2016-11-05 1 views
0

주어진 ttf 파일의 모든 글리프의 2 차 베 지어 곡선 정보를 추출하는 데 관심이 있습니다. 현재 파이썬의 ttfquery 라이브러리를 사용하여, 나는 다음과 같은 방식으로 (예 : a 등) 주어진 그래프의 윤곽을 추출 할 수 있어요 :파이썬에서 .ttf 글꼴 파일의 모든 글립에 대한 경계 상자 및 베 지어 곡선 데이터 검색

from ttfquery import describe 
from ttfquery import glyphquery 
import ttfquery.glyph as glyph 

char = "a" 
font_url = "/usr/share/fonts/truetype/liberation/LiberationSerif-Regular.ttf" 
font = describe.openFont(font_url) 
g = glyph.Glyph(char) 
contours = g.calculateContours(font) 
for contour in contours: 
    for point, flag in contour: 
     print point, flag 

이 알파벳 문자가 잘 작동하지만, 다음과 같은 주요 제공 숫자, 구두점, 공백 등을위한 오류 :

신뢰할 수있는 방법은 내가 현재 간접적으로 계산 최소 및 최대를 사용하고있는 베 지어 곡선 점뿐만 아니라 각 그래프의 경계 상자 (모두를 얻을 무엇
Traceback (most recent call last): 
    File "demo.py", line 9, in <module> 
    contours = g.calculateContours(font) 
    File "/usr/local/lib/python2.7/dist-packages/ttfquery/glyph.py", line 33, in calculateContours 
    charglyf = glyf[self.glyphName] 
    File "/usr/local/lib/python2.7/dist-packages/FontTools/fontTools/ttLib/tables/_g_l_y_f.py", line 185, in __getitem__ 
    glyph = self.glyphs[glyphName] 
KeyError: '!' 

등고선에서 검색된 x 및 y 값)?

답변

3

글리프는 문자 다음에 반드시 명명되지는 않습니다. TTF 파일에는 글자와 문자를 매핑하는 구조가 있습니다 (cmap).

입니다
>>> ttfquery.glyphquery.glyphName(font, "!") 
"exclam" 

,

g = glyph.Glyph(ttfquery.glyphquery.glyphName(f, char)) 

g = glyph.Glyph(char) 

를 교체하고 코드가 작동합니다 : ttyquery은지도에 액세스 할 수있는 API가 있습니다.

+0

니스, 글리프 이름도 가져와야한다는 것을 알지 못했습니다! 옆 질문 : 글꼴에 존재하는 glpyh를 모두 얻을 수있는 방법이 있습니까? 글리프를 하나씩 가져 오는 대신 모든 글리프의 베 지어 곡선 데이터를 자동 생성하는 것이 이상적입니다. 당신의 도움을 주셔서 감사합니다. – CodeSurgeon

+0

'f.getGlyphNames'는 글꼴의 모든 글리프 이름을 제공합니다. ttyquery가'cmap' 전체를 가져 오기위한 공식 API를 가지고 있다고 생각하지 않는다면, 수동으로'f [ 'cmap']'로 작업해야합니다. – Phillip

+0

완벽하게 cmap에 대해 배울 것입니다. 정말 고맙습니다! – CodeSurgeon