2009-11-24 4 views

답변

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 등)로는 꽤 사소한 것입니다.

+0

내 나쁜 ... 난 필요한 출력을 설명하지 않았다

여기 스크립트입니다. 결과 (예 : PNG)에 대한 래스터 이미지가 필요합니다 ... 질문을 수정하겠습니다. – btelles

+0

나는 내가 말한 것을 여전히하고, imagemagick이나 유사한 것을 통해 래스터 출력을 생성한다고 생각한다. –

1

Apache Batik 라이브러리는 SVG 컨텐츠를 표시하고 조작하기위한 Java 라이브러리입니다. PNG 파일을 생성하려면 DOM API을 사용하여 display 특성을 렌더링 할 파일을 제외한 모든 경로에서 none으로 설정 한 다음 Transcoder API을 사용하여 비트 맵을 생성 할 수 있습니다. SVG 문서의 모든 경로 요소를 반복하고 특성을 한 번에 inline으로 설정하여 각 경로 요소에 대한 비트 맵을 생성합니다.

3

모두에게 감사드립니다. 나는 두 가지 답을 조합하여 사용했다. Ruby 스크립트를 사용하여 SVG 파일을 구문 분석하고 각 경로마다 새 파일을 작성한 다음 해당 파일에서 png를 생성하는 바둑 변환기를 작성합니다. 개별적인 SVG를 쉽게 생성 할 수 있다는 핵심 통찰력 때문에 닉에게 대답은 받아 들여진다. 고마워, 닉!

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 
관련 문제