67 の個別のパスを持つ SVG イメージがあります。
これらのパスごとにPNGなどの個別のラスター画像を作成し、おそらくパスIDに従って名前を付けるライブラリ/チュートリアルはありますか?
67 の個別のパスを持つ SVG イメージがあります。
これらのパスごとにPNGなどの個別のラスター画像を作成し、おそらくパスIDに従って名前を付けるライブラリ/チュートリアルはありますか?
みんな、ありがとう。結局、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
この正確なワークフローを直接サポートするライブラリは知りませんが、それはおそらく、少なくとも表面的には非常に些細なことに思えるからです。最上位の<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 など) でさえ、非常に簡単です。
Apache Batikライブラリは、SVG コンテンツを表示および操作するための Java ライブラリです。PNG ファイルを生成するには、DOM APIを使用して、レンダリングするパスを除くすべてのパスにdisplay
属性を設定し、 Transcoder APIを使用してビットマップを生成します。SVG ドキュメント内のすべてのパス要素をループし、属性を1 つずつオンに設定して、パス要素ごとにビットマップを生成します。none
display
inline