Dessiner des formes SVG en Python

Réponse rapide: Pour dessiner des formes SVG en Python, créez un SVGDocument, définissez la taille et le viewBox de la racine SVG, créez des éléments de forme avec create_element_ns(), définissez les attributs de géométrie et de style avec set_attribute(), ajoutez chaque forme à la racine et enregistrez le SVG.

1from aspose.svg import SVGDocument
2
3with SVGDocument() as document:
4    svg = document.root_element
5    rect = document.create_element_ns("http://www.w3.org/2000/svg", "rect")
6    rect.set_attribute("width", "80")
7    rect.set_attribute("height", "50")
8    svg.append_child(rect)
9    document.save("shapes.svg")

Dans cet article, vous apprendrez à:

Les formes SVG sont les blocs les plus simples pour générer des diagrammes, icônes, graphiques, badges et illustrations. Chaque forme possède ses propres attributs de géométrie: un rectangle utilise x, y, width et height; un cercle utilise cx, cy et r; un polygone utilise une liste points. Pour un contexte plus large sur le balisage SVG, consultez le guide SVG Shapes.

Bases des formes SVG

ÉlémentAttributs de géométrie principauxÀ utiliser pour
<rect>x, y, width, height, rxBoîtes, panneaux, cartes et rectangles arrondis
<circle>cx, cy, rPoints, badges, marqueurs et icônes circulaires
<ellipse>cx, cy, rx, ryOvales ou marqueurs non circulaires
<line>x1, y1, x2, y2Un seul segment droit
<polyline>pointsSegments ouverts connectés
<polygon>pointsFormes fermées comme les triangles et les étoiles

Comment dessiner des formes SVG en Python

Utilisez ce workflow lorsque vous devez générer un dessin SVG à partir de primitives de forme:

  1. Créez un SVGDocument.
  2. Définissez les attributs width, height et viewBox de la racine SVG.
  3. Créez chaque forme avec document.create_element_ns(namespace_uri, qualified_name).
  4. Définissez les attributs de géométrie et de style avec set_attribute().
  5. Ajoutez chaque forme visible à la racine SVG avec append_child().
  6. Enregistrez le document avec document.save(output_path).

Dessiner des rectangles, cercles et ellipses

Utilisez rectangles, cercles et ellipses lorsque l’illustration peut être décrite par des valeurs simples de centre, taille et rayon. L’exemple suivant crée une petite scène avec un rectangle plein comme arrière-plan, un cercle comme objet principal et une ellipse comme ombre douce.

 1import os
 2from aspose.svg import SVGDocument
 3
 4namespace_uri = "http://www.w3.org/2000/svg"
 5
 6output_folder = "output/"
 7output_path = os.path.join(output_folder, "svg-basic-shapes.svg")
 8os.makedirs(output_folder, exist_ok=True)
 9
10with SVGDocument() as document:
11    svg = document.root_element
12    svg.set_attribute("width", "300")
13    svg.set_attribute("height", "200")
14    svg.set_attribute("viewBox", "0 0 300 200")
15
16    rectangle = document.create_element_ns(namespace_uri, "rect")
17    rectangle.set_attribute("width", "300")
18    rectangle.set_attribute("height", "200")
19    rectangle.set_attribute("fill", "#e6eafa")
20    svg.append_child(rectangle)
21
22    circle = document.create_element_ns(namespace_uri, "circle")
23    circle.set_attribute("cx", "150")
24    circle.set_attribute("cy", "75")
25    circle.set_attribute("r", "50")
26    circle.set_attribute("fill", "#2e86de")
27    circle.set_attribute("stroke", "#0d47a1")
28    circle.set_attribute("stroke-width", "8")
29    svg.append_child(circle)
30
31    ellipse = document.create_element_ns(namespace_uri, "ellipse")
32    ellipse.set_attribute("cx", "150")
33    ellipse.set_attribute("cy", "155")
34    ellipse.set_attribute("rx", "70")
35    ellipse.set_attribute("ry", "20")
36    ellipse.set_attribute("fill", "#90a4ae")
37    ellipse.set_attribute("opacity", "0.35")
38    svg.append_child(ellipse)
39
40    document.save(output_path)

Le SVG enregistré contient uniquement des éléments DOM générés. Cette approche est utile lorsqu’une application calcule les positions des formes, puis écrit le fichier SVG final.

L’illustration montre comment les trois éléments fonctionnent ensemble: <rect> couvre tout le viewBox comme arrière-plan clair, <circle> crée l’objet bleu et l’<ellipse> semi-transparente en dessous se lit comme une ombre.

Scène SVG avec fond rectangulaire clair, cercle bleu et ombre elliptique semi-transparente créée en Python

Dessiner des lignes, polylignes et polygones

Utilisez line pour un segment, polyline pour une ligne ouverte connectée et polygon pour une forme fermée. L’attribut points est une liste de paires de coordonnées séparées par des espaces.

 1import os
 2from aspose.svg import SVGDocument
 3
 4namespace_uri = "http://www.w3.org/2000/svg"
 5
 6output_folder = "output/"
 7output_path = os.path.join(output_folder, "svg-lines-polygons.svg")
 8os.makedirs(output_folder, exist_ok=True)
 9
10with SVGDocument() as document:
11    svg = document.root_element
12    svg.set_attribute("width", "520")
13    svg.set_attribute("height", "300")
14    svg.set_attribute("viewBox", "0 0 520 300")
15
16    line = document.create_element_ns(namespace_uri, "line")
17    line.set_attribute("x1", "30")
18    line.set_attribute("y1", "20")
19    line.set_attribute("x2", "130")
20    line.set_attribute("y2", "290")
21    line.set_attribute("stroke", "#4387be")
22    line.set_attribute("stroke-width", "10")
23    svg.append_child(line)
24
25    polyline = document.create_element_ns(namespace_uri, "polyline")
26    polyline.set_attribute("points", "100,100 160,50 220,100 280,50 340,100 400,50")
27    polyline.set_attribute("fill", "none")
28    polyline.set_attribute("stroke", "#fb6796")
29    polyline.set_attribute("stroke-width", "5")
30    svg.append_child(polyline)
31
32    polygon = document.create_element_ns(namespace_uri, "polygon")
33    polygon.set_attribute("points", "360,290 430,20 500,290")
34    polygon.set_attribute("fill", "#86a9b9")
35    polygon.set_attribute("stroke", "#fb6796")
36    polygon.set_attribute("stroke-width", "5")
37    svg.append_child(polygon)
38
39    document.save(output_path)

La ligne et la polyligne utilisent stroke, car elles dessinent des contours. Le polygone utilise à la fois fill et stroke, car il crée une zone fermée.

L’illustration montre la différence entre les trois éléments. <line> dessine un segment droit, <polyline> dessine un zigzag ouvert depuis la liste points, et <polygon> ferme automatiquement ses points pour former un triangle rempli.

Ligne SVG, zigzag de polyligne ouverte et triangle polygonal rempli créés avec Aspose.SVG for Python

Erreurs courantes et solutions

ProblèmeSolution
La forme n’apparaît pasVérifiez que l’élément a été ajouté à la racine SVG avec append_child()
La forme est hors de la zone visibleVérifiez viewBox, les coordonnées, width et height
La ligne est invisibleDéfinissez stroke et stroke-width; fill ne rend pas une ligne visible
Le polygone semble ouvert ou incorrectVérifiez les paires de coordonnées points et leur ordre
Le rectangle arrondi n’est pas arrondiDéfinissez rx ou ry sur l’élément <rect>

FAQ

Les réponses ci-dessous utilisent le même modèle DOM que les exemples: créer l’élément SVG avec document.create_element_ns(namespace_uri, element_name), définir ses attributs de géométrie et de style, l’ajouter à la racine SVG et enregistrer le document.

Quels éléments de forme SVG puis-je créer en Python?

Vous pouvez créer des formes SVG de base comme rect, circle, ellipse, line, polyline et polygon. Utilisez ces éléments pour les boîtes, badges, marqueurs, diagrammes simples, lignes connectées, triangles et autres formes à arêtes droites.

Comment dessiner un rectangle SVG avec Python?

Utilisez un élément rect et définissez x, y, width et height. Ajoutez des attributs de style comme fill, stroke ou rx, ajoutez le rectangle à la racine SVG et enregistrez le document.

Comment dessiner un cercle SVG avec Python?

Utilisez un élément circle avec cx, cy et r. Ajoutez des attributs fill ou stroke, ajoutez le cercle à la racine SVG et enregistrez le SVG.

Comment dessiner une ellipse SVG avec Python?

Utilisez un élément ellipse avec cx et cy pour le centre, puis définissez rx et ry pour les rayons horizontal et vertical. Ajoutez fill, stroke ou opacity avant d’ajouter l’élément à la racine SVG.

Comment dessiner une ligne SVG avec Python?

Utilisez un élément line et définissez x1, y1, x2 et y2. Une ligne nécessite stroke et généralement stroke-width; définir seulement fill ne la rendra pas visible.

Comment dessiner une polyligne SVG avec Python?

Utilisez un élément polyline et définissez l’attribut points avec des paires de coordonnées comme "30,120 70,75 115,110". Définissez fill="none" lorsque vous voulez uniquement le contour connecté.

Comment dessiner un triangle SVG avec Python?

Utilisez un élément polygon avec trois paires de coordonnées dans l’attribut points, par exemple "50,10 90,80 10,80". Ajoutez fill et stroke, ajoutez le polygone à la racine SVG et enregistrez le SVG.

Comment créer un rectangle arrondi SVG avec Python?

Utilisez un élément rect et définissez rx ou ry en plus de x, y, width et height. Les valeurs rx et ry contrôlent le rayon des coins.

Pourquoi ma forme SVG n'est-elle pas visible?

Une forme est souvent invisible si elle n’a pas été ajoutée à la racine SVG, si elle se trouve hors du viewBox ou si les attributs de peinture nécessaires manquent. Pour les lignes et polylignes, définissez stroke et stroke-width; pour les formes fermées, définissez fill, stroke ou les deux.

Quand utiliser polygon plutôt que path?

Utilisez polygon pour les formes fermées composées de segments droits. Utilisez <path> lorsque la forme nécessite des courbes, des commandes mixtes, plusieurs sous-chemins ou une géométrie plus complexe.

Articles associés