7

ImageMagick を使用して SVG 文字列から jpeg をラスタライズしようと 2 日間費やした後、私はついにあきらめました。

私は実際の変換を正常に機能させることができましたが、Imagemagick は画像をレンダリングするときに変換/回転機能を適切に変換できず、出力が元の SVG とは異なるままになっているようです。

さらに調査したところ、これは既知の問題であり、PHP で SVG を jpeg/png に変換するには「Inkscape」が最適な方法であることがわかりました。

問題は、SVG データが JSON 経由で PHP スクリプトに送信されることです。ブロブまたは文字列を Inkscape コマンド ラインに入力して変換するにはどうすればよいですか?

ご提案いただきありがとうございます。

4

2 に答える 2

3

SVG 文字列があり、それをブラウザーから AJAX 経由でサーバーに送信する場合は、それを一時ファイルに書き込む必要があるため、Inkscape コマンド ラインから参照できます。Inkscape コマンド ラインを使用して JPEG にレンダリングすることはできませんが、PNG にレンダリングすることは簡単にできます。別の形式が本当に必要な場合は、もちろん後で ImageMagick を使用して変換できます。

次のようなものが必要です。

/path/to/inkscape \
    --without-gui \
    --export-png=/path/to/output.png \
    /tmp/file/input.svg

ユーザーからの完全または部分的な SVG 入力を受け入れる場合は、心に留めておく必要のあるセキュリティ上の問題が数多くあることに注意してください。必要に応じてこれを拡張します。

于 2012-05-01T16:35:37.673 に答える
3

stdin を使用して SVG 文字列をinkscape に渡すことはできますが、コードの移植性は低くなります。

// Open Inkscape process
$process = proc_open(
    '/path/to/inkscape -z -f /dev/fd/0 -e /path/to/output' 
    array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')), 
    $pipes
);

// Write svg to stdin
fwrite($pipes[0], $svg);

// Close process
foreach ($pipes as $pipe) fclose($pipe);
proc_close($process);
于 2012-07-13T21:22:09.873 に答える