2011-09-06 3 views
3

SVG에서 PNG로 래스터 화하는 데 Cairo/RSVG 기반 솔루션을 사용하고 있습니다. 그것은 이미 Convert SVG to PNG in Python에서 StackOverflow에 설명 된 beeb입니다. 그러나이 솔루션은 사용자 지정 글꼴과 작동하지 않습니다.Python에서 사용자 지정 글꼴이있는 SVG에

나는 this page describing embedding SVG fonts을 찾았습니다.

예제에서 설명한대로 XLink를 통해 외부 SVG에서 포함하려고했습니다. 동일한 SVG 파일에 글꼴을 직접 포함 시키려고했습니다. CSS Web Fonts 구문을 사용해 보았습니다. 세 가지 방법 중 어느 것도 Cairo로 렌더링 할 때 작동하지 않습니다 (우분투의 기본 뷰어 인 GNOME의 Eye에서도 작동하지 않습니다).

카이로와 똑같은 결과로 ImageMagick을 사용해 보았습니다.

반면에 3 가지 글꼴 삽입 방법을 사용하면 Google 크롬 또는 webkit2png.py을 사용하여 WebKit에서 글꼴이 잘 렌더링됩니다. 그러나 가능하다면 QV WebKit을 서버에서 사용하는 것을 피하고 싶습니다. (xvfb 등을 포함하여) 사소한 설정이기 때문에 매우 효율적이거나 안정적이지 않을 수 있습니다.

파이썬에서 SVG를 PNG로 렌더링하는 다른 방법이 있습니까?

답변

0

당신은 inkscape를 사용하려고 할 수는 아마도이 더 나은 결과를 제공합니다 : 파이썬에서이 실행

inkscape inputfile.svg --export-png=exportfile.png 

여기에 설명되어 있습니다 : Calling an external command in Python

+0

서버에 설치하고 싶은 소프트웨어가 확실하지 않습니다. – vartec

+1

@vartec : 적어도 * 일부 타사 제품이 필요합니다. 왜 inkscape가 다른 해결책보다 어느 정도 신뢰성이 있어야하는지 모릅니다. Windows의 경우, 휴대용 버전 인 http://portableapps.com/apps/graphics_pictures/inkscape_portable도 있습니다. 설치하지 않으려는 경우, 관리자 권한없이 사용하지 않고 즉시 사용할 수 있습니다. 시스템에 자체 통합. –

+0

방금 ​​시도했지만 전혀 작동하지 않습니다. 사용자 정의 글꼴을 렌더링 할뿐만 아니라 XLink를 사용하여 삽입 한 외부 이미지도 처리하지 않습니다. – vartec

2

나는 바로이 문제를 연구 일주일에 지출하고 있다는 결론을 내렸다 사용자 정의 글꼴로 SVG의 서버 측 렌더링/래스터 화를 처리하는 가장 좋은 방법은 해당 글꼴을 서버에 설치하는 것입니다. 내가 시도한 도구 (rsvg, imagemagick, phantomjs, qtwebkit ...)는 웹 글꼴과 svg 글꼴을 처리 할 수 ​​없었다.

Google은 서버에서 다운로드하여 사용할 수있는 several hundred fonts (성장 중)입니다.

  • 다운로드 OTF 또는 TTF 폰트
  • 은 SVG의 문서에 글꼴 가족 이름을 가진 외부 글꼴의 CSS 정의를 대체 서버를 설치하고 글꼴 캐시
  • 를 새로 고칩니다.

웹 페이지에서 동일한 글꼴을 사용해야하는 경우 자체 서버 시간과 네트워크 대역폭을 절약하기 위해 WOFF 파일에 대해 Google CDN에 직접 연결할 수 있습니다.

0

Imagemagick으로 저는 서버에 설치된 글꼴로 래스터 라이징하는 특정 작업에 여전히 어려움을 겪습니다.하지만 .svg에서 .png로 -convert를 사용하면 실패합니다. 모든 유형을 전환하는 것으로 보입니다. arial 텍스트를 나는 ImageMagick이 버그 또는 .svg에 필요한 특정 형식이 될 수있다 생각

0

RSVG 확인하기 위해 몇 가지 :

  • 글꼴 소스 파일은 시스템 또는 사용자의 글꼴 경로에 있는지
  • SVG의 글꼴 이름은 공백이 포함되어 있어도 인용되지 않습니다. librsvg는 따옴표가 글꼴 이름의 일부이고 원본 파일을 찾지 못한다고 가정합니다.
관련 문제