2011-07-29 10 views
1

하나의 exec 명령으로 여러 명령을 실행할 수 있습니까? SVG 파일에서 일부 이미지를 가져와야하므로이 변형이 너무 느립니다.한 줄에 multi inkscape 명령을 실행하십시오.

exec('inkscape file.svg --export-id=g123 --export-png=img1.png'); 
exec('inkscape file.svg --export-id=g124 --export-png=img2.png'); 
exec('inkscape file.svg --export-id=g125 --export-png=img3.png'); 

그래서 모든 것을 한 줄로 처리해야합니다. 나는 이미 이것을 시도했다 :

exec('inkscape file.svg --export-id=g125 --export-png=img3.png inkscape file.svg --export-id=g123 --export-png=img1.png'); 

그러나 이것은 마지막 이미지 만 추출한다.

답변

1

exec()는 아마도 느리지 않습니다. Server/inkscape가 느립니다.

+0

처럼 사용 한 줄로 (';') 사용하면 더 빠르지 않을 것입니다. Inkscape는 병목 현상입니다 (@ Geenesis가 이미 말했듯이). @ Genesis 그가 쉘로 변경해야하는 이유는 무엇입니까? Inkscape는 병목 현상이므로 PHP를 쉘로 변경하는 것은 별 문제가 아닙니다. – elslooo

+0

@TimvanElsloo : 마지막 문장 삭제 :) – genesis

2

exec() 자체가 느리지 않습니다. 그러나 각각의 호출로 Inkscape를 시작하고 작업을 수행 한 다음 다시 닫습니다. 즉, 너무 오래 걸립니다.

불행히도 Inkscape에는 일괄 처리 모드가 없습니다. 당신은 Gimp을 사용할 수 있는데, 같은 작업을 일괄 처리 할 수 ​​있습니다.

1

Inkscape를 쉘 모드로 실행하고 명령에 명령을 입력하여 통신 할 수 있습니다. 당신이 PHP에서 구현하지 않으려는 경우 당신은 당신을 위해 않는 간단한 쉘 래퍼, 예를 들어 작성할 수

#!/bin/bash 
SVG="$1" 
shift 
(
while [ "$1" != "" ] ; do 
    echo "\"--file=$SVG\" \"--export-id=$1\" \"--export-png=$2\"" 
    shift 2 
done 
echo "quit" 
) | \ 
    /path/to/inkscape --shell 2>/dev/null 

을 그리고 당신이 결합 할 경우에도이

exec("/path/to/wrapper file.svg g123 img1.png g124 img2.png g125 img3.png"); 
관련 문제