6

私は大きな SVG ファイル (約 60 MB、10000x10000 ピクセルですが、さらに大きくなる可能性があります) を持っています。たとえば、そこから多くのタイル張りの 256x256 PNG 画像を作成したいと考えています (この例では、1600 の画像があります)。 ; ラウンド (10000/256)^2)。

Webサーバーでこれを行う方法を知っている人はいますか(特にPHPを実行しています)? rsvg について考えましたが、バウンディング ボックスを変更する機能がないようです (セクションごとに手動で行うのは避けたいと思います)。ImageMagick ならできるかもしれませんが、私はうまく動かせませんでした。rsvg を使用して大きな PNG を作成してから、非常に大きな画像のタイリング専用のツールを使用するとうまくいくかもしれませんが、そのようなものを見つけることができませんでした! 速度は実際には問題ではありませんが、望ましいことなので、最悪の事態が発生した場合は、セクションごとに SVG の境界ボックスを変更することを検討するかもしれません。しかし、世代が永遠に続くのを見ることができました!

これを行う方法を知っている人はいますか?

2016-03-02 を編集:

私は最近、この質問に対する回答が再び必要になったのですが、Inkscape は、特定のサイズで特定の領域の SVG をレンダリングできる唯一のツールのようです (svgexportこれらの要件をほぼ満たしていますが、アスペクト比を変更することはできません)。 .

私の目的は、SVG を 256x256 のタイルにタイル化することでした。現在inkscape、約 16,000 x 16,000 のレンダリングを繰り返し実行し、結果の画像をタイル化することで、任意に大きな SVG をタイル化できるスクリプトを作成することに成功しました。サイズが 500,000 x 500,000 ピクセルを超える SVG のレンダリングに成功しました。メモリ使用量に問題はありません (時間がかかるだけです!)。

4

5 に答える 5

9

inkscapeには、png をエクスポートするコマンド ライン モードがあり、オプションの引数を使用して、エクスポートする領域を選択します。

inkscape vector.svg --export-png=raster.png --export-area=0:0:100:100
于 2010-07-23T08:49:26.130 に答える
1

私はApache Batikを見たいと思います。特に、彼らのSVG Rasterizerはまさに必要なもののように見えます。

ただし、巨大な SVG ファイルに使用したことがないので、その場合に最適化されているかどうかはわかりません。

于 2010-06-26T01:05:52.373 に答える
0

PanoJSはあなたが求めていることをしているようです。ただし、最初にSVGを大きなPNGに変換し(たとえば、コマンドラインでinkscapeを使用して)、次にPanoJSのタイルメーカーを使用してタイルを作成する必要があります。これは非常にメモリを大量に消費する獣ですが、正常に実行できる場合は、PanoJSJavascriptコードを使用してWebサーバーを指すことができます。XKCDは、お金を表す大きな画像に使用しました。

于 2012-04-18T04:10:33.910 に答える
0

SVG (コピー) のソース プロパティを編集して、特定の領域のみをレンダリングすることができます。「幅」と「高さ」のプロパティを使用して、目的のタイル サイズ (256) と「viewBox」を目的のタイル領域に一致させます (たとえば、2 行目の 3 番目のタイルの場合は「viewBox="512 256 768 512"」)。 )。ループで次のようなことができます。

$sed = "sed 's/width=\"10000\"/width=\"256\"' ".$sourcefile;
$sed .= " | sed 's/height=\"10000\"/height=\"256\"'";
$sed .= " | sed 's/viewBox=\"0 0 10000 10000\"/viewBox=\"0 0 256 256\"'";
exec($sed." > ".$tmpfile);
exec('rsvg '.$tmpfile.' > '.$tilefile);

ただし、これが非常に大きなファイルでどのように動作するかはわかりません。

于 2012-08-27T08:38:29.783 に答える
0

私が以前に投稿したこの質問をチェックして、うまくいきました。

画像が 10000x10000 しかない場合、質問にあるスクリプトが最適に機能します。

ただし、もっと大きな画像を使用したい場合は、私の anser のスクリプトをチェックしてください。

ImageMagick 巨大な画像を切り取る

于 2012-05-15T09:42:05.927 に答える