3

67 の個別のパスを持つ SVG イメージがあります。

これらのパスごとにPNGなどの個別のラスター画像を作成し、おそらくパスIDに従って名前を付けるライブラリ/チュートリアルはありますか?

4

3 に答える 3

5

みんな、ありがとう。結局、2つの答えを組み合わせて使用​​しました。Ruby スクリプトを使用して SVG ファイルを解析し、パスごとに新しいファイルを作成してから、batik コンバーターを使用してそのファイルから png を生成しました。受け入れられた答えは、個々の SVG を簡単に作成できるという重要な洞察のため、Nick に行きます。ありがとうニック!

スクリプトは次のとおりです。

require 'rubygems'
require 'nokogiri'
file = 'dark_florida_no_numbers.svg'

file_string = IO.read(file)

reader = Nokogiri::XML::Reader(file_string)

reader.each do |node|

  if node.name == 'path'
    county = node.attributes['id']
    File.open("dark/#{county}.svg", 'w') do |f|
      f.write "<svg xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.0\" >\n  <path "
      node.attributes.each do |attr, value|
        f.write " #{attr}=\"#{value}\""
      end
      f.write "/>\n</svg>"
    end
    `java -jar b/batik-rasterizer.jar dark/#{county}.svg`
  end
end
于 2009-11-24T05:37:35.327 に答える
3

この正確なワークフローを直接サポートするライブラリは知りませんが、それはおそらく、少なくとも表面的には非常に些細なことに思えるからです。最上位の<path/>ノードについて話していると仮定すると、これは XML を処理できる任意のライブラリで達成できるはずです。生の XML を直接処理し、この特定のドキュメントが SVG であるという事実を無視してください。あなたが持っている場合:

<svg ...>
  <path title="a" d="M 100 100 L 300 100 L 200 300 z" stroke-width="3" />
  <path title="b" d="M 200 100 L 300 100 L 200 300 z" stroke-width="3" />
  <path title="c" d="M 300 100 L 300 100 L 200 300 z" stroke-width="3" />
</svg>

そして、あなたが望む:

[a.svg]
<svg ...>
  <path d="M 100 100 L 300 100 L 200 300 z" stroke="blue" stroke-width="3" />
</svg>

[b.svg]
<svg ...>
  <path d="M 200 100 L 300 100 L 200 300 z" stroke="blue" stroke-width="3" />
</svg>

次に、選択した言語/ライブラリ/ツールを使用して「パス」ノードへのパスを定義し、ルートドキュメントからそれらを吸い出し、タイトル属性を取得して、同じオリジナルを共有する新しいドキュメントにコピーするだけです。キャンバス属性 (それがあなたのケースに適している場合 - または必要なものに変更する場合) に、タイトルをファイル名として使用します。これは、任意の XML パーサーや、最も基本的な DOM 処理 API (または XSLT/XPATH など) でさえ、非常に簡単です。

于 2009-11-24T04:18:01.837 に答える
1

Apache Batikライブラリは、SVG コンテンツを表示および操作するための Java ライブラリです。PNG ファイルを生成するには、DOM APIを使用して、レンダリングするパスを除くすべてのパスにdisplay属性を設定し、 Transcoder APIを使用してビットマップを生成します。SVG ドキュメント内のすべてのパス要素をループし、属性を1 つずつオンに設定して、パス要素ごとにビットマップを生成します。nonedisplayinline

于 2009-11-24T04:51:33.157 に答える