2012-04-01 5 views
4

SVG 이미지를 PNG 또는 PDF로 변환하기 위해 * nix 계열 시스템 (OS X 10.6.8, 다양한 맛의 Linux)에서 Gearman PHP 프로세스로 inkscape을 실행하고 있습니다. 나는이 같은 (줄 바꿈 단지 명확성을 위해 여기에 추가)를 사용 :X 서버없이 inkscape 실행

/full/path/to/inkscape -z \ 
    --export-png=/path/to/output.png \ 
    --export-width=100 --export-height=100 \ 
    /path/to/input.svg 

그것은 작동하지만, -z 플래그 내가 OS에 (내 콘솔 출력이 얻을 ("X 서버를 사용하지 마십시오")에도 불구하고 X는) :

Setting Language: .UTF-8 

(process:44699): Gtk-WARNING **: Locale not supported by C library. 
    Using the fallback 'C' locale. 
Xlib: extension "RANDR" missing on display "/tmp/launch-WvcqRh/org.x:0". 

이는 잉크 스케이프가가 필요한 것보다 더 라이브러리를로드하고 X 서버에 연결을 시도하지 않은 경우가 더 빨리 될 수 있다고한다 나에게 제안합니다. 그러나 -z/--without-gui 플래그를 사용하는 것 이외에 무엇을 시도해야할지 모르겠습니다. 내 dev 컴퓨터의 성능은 여전히 ​​잠깐 (최소한 사소한 SVG 파일의 경우)이지만 가능한 경우이를 정리하고 싶습니다. 최선의 대답이 "오류 출력 억제"일지라도!

아마도 bash DISPLAY env var를 끄거나 재설정하면됩니까? X에 익숙하지 않습니다.

답변

6

예, 프로그램을 X를 전혀 찾지 않으려면 프로세스를 시작하기 전에 unset DISPLAY 수 있습니다.

또한 Xvfb가 사용할 수 있습니다에 "가짜"X 서버 : http://en.wikipedia.org/wiki/Xvfb

또한 이러한 도구를보고 할 수 있습니다 :

그들의 소스 코드는 이며 실제로는입니다.

+0

감사합니다, 나는 줄 것이다 'DISPLAY' 일이 끝나면 다시보고 할 것입니다! 그래도 결과가 나오지 않으면 Xvfb를 사용해 보겠다.하지만이 시스템을 최저 VPS에서 실행하고 있으므로 여분의 소프트웨어를 최소한으로 유지하고 싶다. – halfer

+0

Btw; 필자는 Mac에서'svg2pdf'를 시도해 보았습니다. Inkscape SVG 문서를 렌더링하는 것은 그리 좋지 않은 것처럼 보입니다. 단일 패밀리의 다양한 글꼴 스타일이 모두 기본 변형으로 렌더링되었습니다. (어쩌면 여기에 설정해야 할 것이 있지만,'inkscape'는 그 자리를 얻습니다.) – halfer

+0

나는'DISPLAY = ''inkscape --export-png = output.png input.svg' 그리고'unset DISPLAY'와'inkscape' 명령을 가진 bash 스크립트를 시도해 보았고'Gtk-WARNING '. 당신처럼, 나는 그 일을 기대하고있었습니다 - 바! – halfer

0

(echo foo.ai --export-plain-svg foo.svg) | DISPLAY= inkscape --shell

+1

안녕하세요, 고마워요. 이걸 나 한테 더 설명 할 수 있니? 저는 전문가 수준의 쉘 사용자는 아니지만'--export-plain-svg' 인수가'echo'와 혼동됩니다. 이미지 데이터가'DISPLAY' 환경 변수와 함께'inkscape' 명령으로 파이프된다는 테크닉의 핵심은 무엇입니까? – halfer

1

사실 오류에 응답 할 수있는 능력을 유지하면서 출력을 억제하는 또 다른 방법은, 파이썬에서 잉크 스케이프를 호출하는 것입니다. 내 맥 OS 시스템에서

import subprocess    # May want to use subprocess32 instead 

cmd_list = [ '/full/path/to/inkscape', '-z', 
      '--export-png', '/path/to/output.png', 
      '--export-width', 100, 
      '--export-height', 100, 
      '/path/to/input.svg' ] 

# Invoke the command. Divert output that normally goes to stdout or stderr. 
p = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

# Below, <out> and <err> are strings or <None>, derived from stdout and stderr. 
out, err = p.communicate()  # Waits for process to terminate 

# Maybe do something with stdout output that is in <out> 
# Maybe do something with stderr output that is in <err> 

if p.returncode: 
    raise Exception('Inkscape error: ' + (err or '?') ) 

(원래 포스터에 의해 설명) crufty 상태 메시지는 err에서 생을 마감. 게다가, 내가 달릴 특정 작업을 위해, out에 끝 추가 메시징있다 : (. 입력 SVG 파일 339 개 픽셀 (339)의 크기를했다)

Background RRGGBBAA: ffffff00 
Area 0:0:339:339 exported to 100 x 100 pixels (72.4584 dpi) 
Bitmap saved as: /path/to/output.png 

관련 문제