2012-10-11 13 views
9

ネストされたグループをSVGのトランスフォーメーションでフラット化するために使用できるコマンドラインツールがあるのだろうか?SVGネストされた変換をフラット化するツール

私の特別なケースでは、CADソフトウェア製作のPDFをSVGに変換してから、いくつかの要素を追加して、変更したSVGをWebページに公開して表示しています。 SVGの応答時間は(パンとズームのための)非常に鈍いです。SVG内のネストされたグループの数が非常に多く、数百にも及ぶことが多いことがわかりました。 SVGの各要素について、ブラウザはすべての親ノードの位置を計算する必要があります...

明らかに、これらの要素に必要なのは1つの変換(行列)です。ですから、誰かがこれを平らにするツール(またはC#またはDelphiの実装を行うツール)を知っているのだろうかと思います。

+0

これまでまともな解決策を見つけたことがありますか? –

+0

@TomHall:PStillを除き、解決策はありません。多くのポリライン(パス)をよりシンプルな形に変換するコードは、複雑すぎるかもしれないと思います。 – Optavius

+0

これまでに私が見つけた最良の選択肢は、Adobe PDFの「最適化されたPDF」(これは「オブジェクトを破棄する」の一部)として保存するときに、「フォームフィールドの展開」オプションを使用することです。これは必ずしもオブジェクトの数を減らさなくても、少なくとも入れ子を取り除きます。 – Optavius

答えて

0

あなたはSVG Cleanerと行くかもしれません。残念なことにGUIツールなので、実際にはあなたの要件に合っていませんが、バッチ処理の理念が役立ちます。

+1

残念ながら、SVGクリーナーはこれほど遠くはありません。私は本当に 'のようなナンセンスを平坦化するためのツールがあることを願っています。パスd = "m0,841.61h5.67" /><パスd = "m0,841.61h5.67" /> ...' –

1

おかげDelapouite、

はその間、私はこの1つを見つけた:( PStill)。それは構造(PDFからPDFへ)を平坦化する完璧な仕事をしますが、結果として得られるSVGにはまだ多くの要素が含まれているため、ブラウザにとってはまったく使用できません。実際には、CADシステムがPDFにどのような問題を引き起こしているのですか。一つの長いパスではなく、非常に小さなパスがたくさんあります。ある日:-)

0

Inkscape Graphics Editorで変換をフラット化するオプションがあります。
Inkscapeターミナルコマンドを使用して達成することができますが、そのようなコマンドが存在するかどうかを調べる必要があります。

+1

Inkscapeは少なくとも私が知る限り、(少なくともGUIでは)仕事をしているようですが、それは非常に限定された機能です: すべてのオブジェクトを選択してからグループを解除し、それらを再選択してグループを解除する必要があります。グループを解除するグループがもうないと確信するまで繰り返します。これには一定の処理時間がかかるたびに、非常に退屈なプロセスになります。 – Optavius

5

私が見つけた最高のものは、svgoですhttps://github.com/svg/svgoしかし、まだ満足できるものではありません。 SVGOの目標は、より小さいsvgファイルを生成することです。つまり、変換でより小さいsvgファイルが許可されている場合、そのファイルは保持されます。私の目的はOPと似ていますが、少し異なります。私は平らにしてSVGを完全に単純化して基本パスの&要素にすることができるものを探しています。

+0

https://jakearchibald.github.io/svgomg/ svgoをビルドすると、これを試すことができます。 ' <パスD = "M 10201 H 90" ストローク= "石灰" /> ' – Ruskin

+0

Iは= <'のSVGのxmlnsを得ます <パスd = "M137 0v350"ストローク= "トマト" /> <パス名= "M137 0v350"パスd = "M0 204h90"ストローク= "#0f0" /> 'コマンドラインSVGOで可能です。 – Ruskin

-1

私はInkscapeを初めて使っていますが、GIMPには古いです。

Inkscapeには "extensions"フォルダがあり、そこにはpythonプログラムがあります。

Inkscapeは、ユーザーが独自のカスタム拡張機能を作成できるようにするために、GIMPと同様の機能(ヘルプですぐにはわかりませんでしたが)があると思われます。 GIMPでは、最も単純なスクリプトは、ユーザーがワークフローの1つでメニューから選択する手動ステップを自動化するだけです。

ただし、メニューで提供されるものよりも高度な処理が可能です。