2013-03-12 5 views
3

누구나 개선 할 수 있습니까? 나는 파이썬에 상당히 익숙하며 이식 가능한 코드를 작성하려고 노력하고있다. ImageDraw.Draw.Text로 전달할 글꼴 파일을 찾아야합니다. 내 시스템에서파이썬 - TTF 파일 찾기

import matplotlib.font_manager as fontman 

def findFontFile(searchFont): 
    fList = fontman.findSystemFonts(fontpaths=None, fontext='ttf') 
    targetFont = [] 
    for row in fList: 
     try: 
      if searchFont in row: 
       targetFont.append(row) 
     except TypeError: 
      pass 
    return targetFont[0] 

이 저를 제공합니다 정확히 내가 필요로하는 것입니다

>>> findFontFile('DejaVuSans.ttf') 
'/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf' 

합니다. 이것은 Mac/Windows 시스템과 Linux (Linux에서 테스트)에서 작동하는 것처럼 보입니까? 보다 효율적으로 수행 할 수 있습니까? 좀 더 읽기 쉬운 스타일로? Mac/Windows는 다른 글꼴 파일 명명 형식을 사용합니까? 제안을 환영합니다. 발신자는 다음 (권한 등을 확인 후) 사용하는 요소를 결정하는 것입니다

def find_font_file(query): 
     matches = filter(lambda path: query in os.path.basename(path), fontman.findSystemFonts()) 
     return matches 

:

+0

[documentation] (http://matplotlib.org/api/font_manager_api.html)을 읽으면 여러 플랫폼이 지원됩니다. 나는 당신이 잠시 동안 어떤 플랫폼을 사용해야하는지 알아 내려고 노력할 것이라고 생각합니다. 코드가 플랫폼에 따라 다르므로 matplotlib에 따라 다릅니다. 또한 글꼴이 좋은 경우 행을 반환 할 수 있습니다. – ferrix

+0

왜 matplotlib.font_manager.FontManager를 사용하지 않았습니까? –

+0

전체 설명서를 읽지 않았기 때문에. 나는 Cristiano의 답을 표시했지만, 대신 FontManager를 사용할 것입니다. 고마워. – Dorsey

답변

0

나는 (일부 변화는 스타일의 문제, 같은 더 파이썬이다)와 같은 약간의 재 작성을 할 것입니다.

here 호환성은 lib가 "기본"운영 체제 용 공용 디렉토리 세트를 사용하여 글꼴 (X 윈도우 관리자 (Linux), Windows 및 OS X)을 검색한다는 것을 확인할 수 있습니다. 그러나 앱을 실행할 다양한 환경에 대한 자세한 정보가 있으면 검색 할 디렉토리를 항상 전달할 수 있습니다.

+0

@lieryan의 조언을 따르기로 변경했습니다. – cristiano2lopes

0

if searchFont in row을 실행할 때주의하십시오.

누군가가 사용자 이름이 marial이고 findFontFile('arial')을 사용하여 글꼴 arial을 검색하는 경우 사용자의 홈 디렉토리 (예 : /home/marial/.fonts)에 설치된 글꼴이 모두 코드에서 가져올 수 있습니다. .