2013-04-07 15 views
13

Ich möchte eine SVG-Datei mit Python zu extrahieren, um Koordinaten/Pfade zu extrahieren (ich glaube, das ist unter der "Pfad" ID aufgeführt, insbesondere die d = "..." />). Diese Daten werden eventuell verwendet, um eine 2-Achsen-CNC zu steuern.Python SVG-Parser

Ich habe auf SO und Google für Bibliotheken gesucht, die die Zeichenfolge solcher Pfade zurückgeben können, damit ich weiter analysieren kann, aber ohne Erfolg. Existiert eine solche Bibliothek?

Antwort

18

Ignorieren Transformationen können Sie die Pfadzeichenfolgen aus einem SVG-Extrakt etwa so:

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

Haben Sie Vorschläge für, wenn Transformationen sind wichtig? – Veech

+0

@Veech: Wenn es eine Transformation gibt, ist es wahrscheinlich wichtig. Leider braucht es viel mehr Code, um damit umzugehen. – icktoofay

+1

Ja, das ist mir klar geworden. Ich habe festgestellt, dass [cjlano's svg repo] (https://github.com/cjlano/svg) gut genug ist (mit einigen Modifikationen). – Veech

4

gibt es das d-String kann in einer oder zwei Zeilen mit svgpathtools erfolgen.

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

Pfade ist eine Liste von svgpathtools Pfadobjekte (nur die Kurve Info enthält, keine Farben, Stile, etc.). Attribute ist eine Liste der entsprechenden Wörterbuchobjekte, die die Attribute jedes Pfades speichern.

, sagen wir, dann aus der d-strings drucken ...

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