Accueil

Traduction

Dessiner avec SVG - sommaire

Dessiner avec SVG - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

SVG : la balise path

Nous allons maintenant introduire la balise path (chemin) de la spécification SVG.
Grâce à cette balise on peut réaliser des formes complexes : courbes de Bézier, arcs elliptiques, etc.
Mais la balise path peut aussi remplacer avantageusement les balises polygon, polyline pour dessiner des chemins ouverts ou fermés (polygones).

Exemple de forme complexe produite par la balise path

L'instruction path est la suivante (la zone de dessin fait 400 par 300):

Donc une seule instruction pour dessiner une forme complexe !
style1 est une classe définie dans la feuille de style interne de la page.
Règle de style correspondante : .style1 {stroke : olive ; stroke-width:4px; fill:none; }

La notation en absolu du chemin

Exemple de notation en absolu de chemins

La balise path Chemin non fermé : pas de commande Z Chemin fermé : commande Z à la fin Ligne produite avec la balise path

Le code correspondant

Nous avons trois formes : deux triangles et une ligne
Le premier triangle est ouvert (manque un segment) et le deuxième est fermé;

Un chemin peut comprendre plusieurs commandes L mais toujours une seule commande M.
La virgule séparant l'abscisse de l'ordonnée est facultative. Donc vous pouvez parfaitement écrire les chemins de la façon suivante , par exemple : "M 240 40 L 350 100 L 300 280 Z".

La balise path peut comprendre d'autres attributs que "d" : class, id, style, fill, stroke, etc.

Chemin avec des verticales et horizontales

SVG - balise path - Tracer des lignes horizontales et verticales avec les commandes H et V path fermé composé de droites horizontales et verticales path ouvert composé de droites horizontales et verticales

Le code SVG correspondant

Lorsque un chemin consiste en une succession de segments horizontaux ou verticaux utilisez les commandes H et V à la place de L.
Il y a en effet la commande H (comme Horizontal) et la commande V (comme Vertical) qui remplacent avantageusement la commande L (comme Lineto).
Les commandes H et V doivent être suivies d’un seul nombre : l'abscisse (pour la commande H) ou l'ordonnée (pour la commande V) du point d’arrivée du segment.

Les commentaires dans le code SVG

Observez attentivement le code SVG ci-dessous !
J'ai utilisé la balise double title pour un commentaire général de l'image vectorielle, son titre.
J'ai utilisé la balise double desc pour commenter chaque instruction basée sur la balie path, sa description.
Ces deux balises ne peuvent contenir que du texte ; ce sont des commentaires.

Notation en relatif de chemins

Définir dans un path les coordonnées x et y en absolu de chaque point (c'est à dire par rapport à l'arête supérieure gauche de la zone de dessin) est une opération délicate et qui exige de réaliser au préalable un croquis (sur papier à petits carreaux).
Mais, bonne nouvelle, il est possible d'exprimer les coordonnées d'un point de façon relative c'est à dire d'exprimer ses coordonnées par rapport au précédent point. Ce qui, vous en conviendrez, beaucoup plus simple pour l'esprit humain.
Pour préciser que les coordonnées d'un point sont exprimées en relatif il faut écrire les commandes en minuscule (l,h,v).

Attention les coordonnées x et y du point de départ du chemin c'est à dire les coordonnées qui suivent la commande M doivent toujours être exprimées en absolu !

Exemple de notation en relatif du chemin

SVG - balise path - notation en relatif des coordonnées du chemin dessiner un escalier : notation en relatif dessiner un zigzag : notation en relatif

Le code SVG correspondant

Chaque balise path a deux attributs : d et class !
Dans l'attribut d les commandes h,v, l sont écrites en minuscules !

Dans le premier path on une alternance : h 20 v 20
Dans le deuxième path on a une alternance : l 20, -20 l 20,20
Le premier chemin est fermé (commande z) ; ce qui n'est pas le cas du deuxième chemin (absence de commande z).

La virgule séparant l'abscisse de l'ordonnée est facultative. Donc vous pouvez parfaitement écrire les chemins de la façon suivante, par exemple : "M 10 280 l 20 -20 l 20 20 l 20 -20 ... "

Utilisez Inkscape pour produire le code correspondant aux chemins

Comme vous le constatez le code SVG devient un peu plus complexe mais, bonne nouvelle, vous pouvez demander à un logiciel d'encoder à votre place. Je veux parler de Inkscape mais il existe aussi Adobe Illustrator. Le premier est gratuit tandis que le deuxième est payant.
Inkscape est un programme qui permet de produire des images vectorielles au format SVG.
Il comprend un éditeur WYSIWIG c'est à dire que vous dessinez des formes et le programme génère un fichier encodé en SVG.

Mon site propose un tutoriel sur le logiciel Inkscape :
Inkscape : éditeur WYSIWIG de SVG

Insertion d'un document Inkscape dans la page web

Ci-dessous j'ai inséré dans la page un document Inkscape intitulé "svg_par_inkscape.svg".

J'ai inséré ce document via la balise IMG, j'aurais pu utilisé aussi IFRAME ...
Instruction HTML pour insérer le fichier Inkscape :
<img src ="svg_par_inkscape.svg" class ="centre" style ="border : 1px solid black;" >

Le code SVG du document Inkscape

Ci-dessous le code SVG de ce fichier :

Inkcape crée des regroupements (balise G) pour mettre en facteur commun certains attributs.
Ici fill ="none" s'applique aux quatre chemins.
stroke ="#000" (noir) s'applique aux trois derniers chemins

Je n'étais pas obligé d'insérer le document Inkscape dans la page HTML, je pouvais simplement coller le code SVG de ce document dans le document HTML.
Après collage, il faut cependant procéder une modification mineure : valeur de l'attribut width remplacée par "60%" afin que l'image devienne "responsive" et valeur de height passe à "auto".

Rendu avec du code SVG interne

Notez que dans les deux cas (SVG externe ou SVG interne à la page) le rendu est strictement identique !

Dessiner des courbes de Bézier (quadratique et cubique)

Comme vous savez il existe deux types de courbes de Bézier : les courbes quadratiques et les courbes cubiques.

Courbes quadratiques

Exemple

image SVG

Le code du fichier SVG inséré dans la page

Si vous utilisez Inkscape le document obtenu comprendra forcément ces espaces de noms.

Notez qu'un fichier SVG peut comporter une feuille de style.
Il faut bien sûr utiliser les propriétés CSS de mise en forme qui sont spécifiques aux éléments SVG : fill, stroke, etc.
Pour le reste il n'y a aucune différence entre du code SVG interne ou externe.

Comme dans tout path la commande Q est précédée de la commande M avec les coordonnées du point de départ.

Pour comprendre le fonctionnement d’une courbe quadratiques il faut imaginer un segment de métal qui, attiré par un aimant (le point d'inflexion), se courbe vers ce point aimant (sans jamais le toucher).
Dans l'exemple Les deux points d'inflexion ont la même abcsisse (200) mais des ordonnées opposées : 5 et 195.
Donc la première ligne se courbe vers le haut et la deuxième se courbe vers le bas.

Courbes cubiques avec SVG

Exemple

image SVG

Le code du fichier SVG (extraits) inséré dans cette page

Les courbes de Bézier cubiques (ou tout simplement "courbes cubiques") sont semblables aux courbes de Bézier quadratiques à la différence qu’il y a deux points aimants.

Comme dans tout chemin la commande C est précédée de la commande M avec les coordonnées du point de départ.

Dans l'exemple les trois courbes cubiques ont le même point de départ et le même point d'arrivé mais la courbe de couleur bleue est plus creusée que la rouge car les ordonnées de ses deux points d'inflexion sont respectivement 0 et 200 alors que ces mêmes ordonnées sont seulement 50 et 150 pour la courbe rouge.

Faut-il rappeler que la commande c peut être écrite en minuscules suivie des coordonnées en relatif des points d'inflexion et du point d'arrivée c'est à dire par rapport au point de départ.
C'est la technique que j'ai réalisé pour la courbe verte.

Pour cette courbe verte les ordonnées des points d'inflexion sont respectivement -150 et 150 par rapport à l'ordonnée du point d'origine alors qu'elles sont -50 et 50 pour la courbe rouge et -100 et 100 pour la courbe bleue.
C'est pour cette raison que c'est la courbe verte la plus creusée.

Arcs de cercle et arcs d'ellipse

Pour dessiner des arcs de cercle ou d'ellipse, il y a deux solutions : une très compliquée et une très simple.

Solution très compliquée

La solution très compliquée consiste à encoder soi-même.

Exemple

Le code SVG que j'ai du saisir dans la page

Commentaire

Pour dessiner des arcs d'ellipse (de cercle) il faut employer la balise path avec la commande A (A comme arc).
La lettre A est précédée des coordonnées X,Y du point de départ de l'arc.

Solution plus simple

J'en conviens, le code SVG devient un peu compliqué ...
Aussi je vous propose une astuce pour un encodage SVG plus simple.

Exemples

Deux canevas SVG de front. L'un présente un arc de cercle (clair de lune) et l'autre un arc d'ellipse.

Le code correspondant

Le code CSS :
une classe définie comme suit : svg.front {display : inline-block ; margin : 10px ; }

Le code SVG :

Comme le premier canevas a comme couleur de fond "navy", le cercle (qui masque partiellement le rond jaune) doit être rempli de cette même couleur.
Le deuxième canevas n'a pas de couleur de fond défini donc par défaut c'est "white".

Troisième solution

Vous vous en doutez, la troisème solution consiste à faire appel à Inskcape pour générer le code SVG.
Vous dessinez des ellipses puis vous convertissez en arcs d'ellipse et en précisant le type d'arc (camembert, arc ouvert, corde).
Si vous enregistrer le document au format "SVG optimisé" vous obtenez un code succinct et propre.
Il suffit ensuite d'ouvrir le document Inkscape via un éditeur tel NotePad puis de copier-coller ce code SVG dans votre page HTML.
Ci-dessous 4 formes dont une ellipse complète et trois arcs d'ellipse.