Maison > Article > développement back-end > Une brève introduction à la solution de données de chemin Inkscape d'analyse Python
[Recommandation associée : Tutoriel vidéo Python3 ]
Parfois, vous devez utiliser des données de chemin pendant le processus de développement. Bien que Python ait sa propre bibliothèque SVG ou d'autres bibliothèques vectorielles, c'est uniquement à des fins expérimentales. besoin d'étudier en profondeur, donc quelques solutions simples sont adoptées : utiliser inkscape pour générer du svg, puis python l'analyse et le génère pour atteindre l'objectif correspondant
Définir les propriétés du document :
Définir la grille :
Importer des images png comme référence :
Notez que les propriétés de l'image et du document importés ont le coin inférieur gauche comme origine :
Dans le Barre de propriétés du calque et de l'objet, modifiez la visibilité de l'image, Verrouillez l'image :
Créez un nouveau calque au-dessus du calque actuel pour dessiner la force de la route
Dessinez un rectangle à volonté et créez la forme correspondante. Par exemple, la découpe entre deux rectangles peut être effectuée via le menu : Chemin->Jeu de différences
En théorie, après l'enregistrement, il existe un fichier svg qui peut être converti en chemin, mais en raison de le format complexe du fichier svg, il y aura une variété de données de forme, nous devons donc ici convertir uniformément diverses formes en chemins pour une analyse simple par python
Ensuite, l'exemple ci-dessus nécessite un traitement ultérieur :
La couche finale obtenue est la suivante :
Après avoir enregistré le fichier svg, utilisez Ouvrir avec le Bloc-notes, et vous verrez le contenu clé suivant :
<g inkscape:groupmode="layer" id="layer2" inkscape:label="图层 2"><path style="fill:none;stroke:#000000;stroke-width:0.1;stroke-dasharray:none" d="m 510.66797,509.15234 3.82812,8.50586 h 3.92383 v -8.50586 z" id="path11706" /><path style="fill:none;stroke:#000000;stroke-width:0.1;stroke-dasharray:none" d="m 504.25195,509.15234 v 8.50586 h 8.14258 l -3.82812,-8.50586 z" id="rect3684" /></g>
Il y a deux données de chemin commençant par m et se terminant avec z, indiquant que les données ont été préparées.
Ici, nous utilisons l'analyse d'expressions régulières et générons les résultats sous forme de table Lua :
import re import sys f=open("绘图.svg","r",encoding='utf-8') print("result={") s=f.read() for mg in re.finditer("<g.*?</g>",s,re.S): for mp in re.finditer("<path.*?/>",mg.group(),re.S): path=[] pathid="" md=re.search("\sd=\"(.+?)\"",mp.group(),re.S) if md: last_pos=(0,0) ###################### 1 2 3 4 5 6 7 8 9 for ml in re.finditer("(M[^MmLlHhVvZz]+)|(m[^MmLlHhVvZz]+)|(L[^MmLlHhVvZz]+)|(l[^MmLlHhVvZz]+)|(H[^MmLlHhVvZz]+)|(h[^MmLlHhVvZz]+)|(V[^MmLlHhVvZz]+)|(v[^MmLlHhVvZz]+)|(Z|z)",md.group(1)): if ml.group(1): ###################### 1 3 for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(1)): last_pos=(float(mv.group(1)),float(mv.group(3))) path.append(last_pos) elif ml.group(2): for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(2)): last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1]+float(mv.group(3))) path.append(last_pos) elif ml.group(3): for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(3)): last_pos=(float(mv.group(1)),float(mv.group(3))) path.append(last_pos) pass elif ml.group(4): for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(4)): last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1]+float(mv.group(3))) path.append(last_pos) pass elif ml.group(5): for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(5)): last_pos=(float(mv.group(1)),last_pos[1]) path.append(last_pos) elif ml.group(6): for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(6)): last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1]) path.append(last_pos) elif ml.group(7): for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(7)): last_pos=(last_pos[0],float(mv.group(1))) path.append(last_pos) elif ml.group(8): for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(8)): last_pos=(last_pos[0],last_pos[1]+float(mv.group(1))) path.append(last_pos) elif ml.group(9): path.append(path[0]) mid=re.search("\sinkscape:label=\"(.+?)\"",mp.group(),re.S) or re.search("\sid=\"(.+?)(-\d+)*?\"",mp.group(),re.S) if mid: pathid=mid.group(1) print("{\nid=\""+pathid+"\",") for pos in path: print("Vector2(%f,%f),"%(pos[0],pos[1])) print("},") print("}\n")
Obtenir les données après l'exécution :
result={ { id="path11706", Vector2(510.667970,509.152340), Vector2(514.496090,517.658200), Vector2(518.419920,517.658200), Vector2(518.419920,509.152340), Vector2(510.667970,509.152340), }, { id="rect3684", Vector2(504.251950,509.152340), Vector2(504.251950,517.658200), Vector2(512.394530,517.658200), Vector2(508.566410,509.152340), Vector2(504.251950,509.152340), }, }
[Recommandations associées : Tutoriel vidéo Python3 ]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!