2013-04-07 3 views
13

Je veux analyser un fichier SVG en utilisant python pour extraire les coordonnées/chemins (je crois que cela est répertorié sous l'ID "path", en particulier le d = "..." />). Ces données seront éventuellement utilisées pour piloter une CNC 2 axes.Python SVG parser

J'ai cherché sur SO et Google pour les bibliothèques qui peuvent retourner la chaîne de ces chemins afin que je puisse analyser plus loin, mais en vain. Est-ce qu'une telle bibliothèque existe?

Répondre

18

Ignorant les transformations, vous pouvez extraire les chaînes de chemin d'un SVG comme ceci:

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

Avez-vous des suggestions pour quand les transformations sont importantes? – Veech

+0

@Veech: S'il y a une transformation, c'est probablement important. Malheureusement, il faut * beaucoup * plus de code pour les gérer. – icktoofay

+1

Oui, je suis venu à réaliser cela. J'ai trouvé que [svg repo de cjlano] (https://github.com/cjlano/svg) pour être assez bon (avec quelques modifications). – Veech

4

Obtenir le d-string peut être fait dans une ligne ou deux à l'aide svgpathtools.

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

chemins une liste des objets svgpathtools Path (contenant seulement l'info courbe, pas de couleurs, styles, etc.). attributs est une liste d'objets de dictionnaire correspondants stockant les attributs de chaque chemin.

Pour, par exemple, imprimer les cordes d ... puis

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