2013-04-07 10 views
13

Chcę przeanalizować plik SVG przy użyciu Pythona, aby wyodrębnić współrzędne/ścieżki (uważam, że jest to wymienione pod identyfikatorem "ścieżka", w szczególności d = "..." />). Dane te zostaną ostatecznie wykorzystane do sterowania 2-osiowym układem CNC.Python SVG parser

Szukałem na SO i Google dla bibliotek, które mogą zwrócić ciąg takich ścieżek, więc mogę dalej analizować, ale bez skutku. Czy taka biblioteka istnieje?

Odpowiedz

18

Ignorowanie transformacje można wyodrębnić ciągi ścieżek z SVG tak:

from xml.dom import minidom 

doc = minidom.parse(svg_file) # parseString also exists 
path_strings = [path.getAttribute('d') for path 
       in doc.getElementsByTagName('path')] 
doc.unlink() 
+1

Czy macie jakieś sugestie kiedy transformacje są ważne? – Veech

+0

@ Vech: Jeśli istnieje transformacja, prawdopodobnie jest to ważne. Niestety zajmuje dużo * więcej * kodu, aby sobie z nimi poradzić. – icktoofay

+1

Tak, zdałem sobie z tego sprawę. Odkryłem, że [cjlano's svg repo] (https://github.com/cjlano/svg) jest wystarczająco dobre (z pewnymi modyfikacjami). – Veech

4

Pierwsze d-ciąg może być wykonane w linii lub dwa użyciu svgpathtools.

from svgpathtools import svg2paths 
paths, attributes = svg2paths('some_svg_file.svg') 

ścieżki znajduje się lista obiektów svgpathtools ścieżki (zawierających tylko informacje krzywa, nie kolory, style, itp.) atrybuty to lista odpowiadających obiektów słownikowych przechowujących atrybuty każdej ścieżki.

do, powiedzmy, wydrukować D-strun potem ...

for k, v in enumerate(attributes): 
    print v['d'] # print d-string of k-th path in SVG