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

Dessins vectoriels avec SVG - chapitre introductif

Ci-dessous une image vectorielle au format SVG.
SVG est le format soutenu par le W3C (organisme de normalisation des langages pour le web) concernant les images vectorielles.
Zoomez la page, l'image garde toute sa qualité ; pas d'effet "escalier" ou crénelage.

image vectorielle SVG

Objet de ce tutoriel

Ce tuto porte sur le format SVG; ce sigle signifie Scalable Vector Graphics.
Lorsque vous utilisez les logiciels de dessins tels Inkscape ou Adobe Illustrator voir Draw de LibreOffice, vous créez des images vectorielles le plus souvent au format SVG.

A la différence de l'image matricielle ("raster graphic" en anglais), l'image vectorielle ("vector graphic" en anglais) est une représentation conceptuelle constituée de primitives géométriques comme les points, les lignes, les courbes et les polygones qui forment des objets décrits par des formules mathématiques. Par exemple, pour représenter un rectangle, on a besoin de préciser l'emplacement de son angle haut et gauche, la largeur et la hauteur du rectangle, l'épaisseur et couleur de bordure, etc.
Au lieu de mémoriser une mosaïque de pixels, un fichier d'image vectorielle stocke la succession d'opérations conduisant au tracé.
Du fait qu'une image vectorielle est décrite par des formules mathématiques, il est possible d'agrandir ou de réduire sa taille sans aucune perte de qualité tandis qu'une image matricielle, faite d'un nombre fini de pixels, ne pourra subir d'agrandissement qu'au prix d'une dégradation sensible appelée crénelage ("aliasing" en anglais).

Il est donc recommandé, dans le cadre du "responsive design" que les logos, bannières, schémas d'un site soient des images vectorielles.
Par contre pour les photos un format matriciel (png, jpg, gif, webp) est préférable.

SVG interne et SVG externe

Depuis HTML5 il est possible d'encoder en SVG directement dans la page web à condition que le code SVG soit contenu dans le conteneur SVG.
Je parlerai donc dans ce tuto tantôt de SVG interne (code SVG dans la page web) et tantôt de SVG externe (un fichier d'extension .svg contenant du code svg mais aussi du CSS voire du JavaScript.
Le SVG interne peut être généré par un framework SVG tel Snap SVG.
Les fichiers d'extension .svg sont le plus souvent produits avec des logiciels tels Inkscape, Adobe Illustrator qui fonctionnent selon le principe WYSIWIG.
Vous pouvez aussi récupérer des images vectorielles auprès de banques d'images.

Les frameworks SVG

Il existe aussi des frameworks écrits en JS pour générer du code SVG interne à la page.
La librairie la plus connue est Snap.svg. Elle est particulièrement intéressante pour créer rapidement des dégradés, filtres et motifs SVG.

Exemple de script Snap SVG

Il faut bien sûr charger au préalable la librairie (un fichier d'extension .js)

...
 var s = Snap("#zone1") ;
// définition de 4 dégradés linéaires 
var lineairedd = s.gradient("l(0, 0, 1, 1) black-red-pink"); 
// axe  : diagonale descendante
var lineairev = s.gradient("l(0, 0, 0, 1) black-orange-yellow"); 
// axe vertical
var lineaireh = s.gradient("l(0, 0, 1, 0) black:50-navy-blue-skyblue"); 
// axe horizontal
var lineairedm = s.gradient("l(0, 1, 1, 0) black:10-olive-green-lime"); 
// axe : diagonale montante

// utilisation des dégradés
s.rect(0, 0, 200,300).attr({fill: lineairedd});
s.rect(300,0,200,300).attr({fill: lineairev});
s.rect(0,300,200,300).attr({fill: lineaireh});
s.rect(300,300,200,300).attr({fill: lineairedm});
...

Ci-dessous le code SVG généré par le script Snap SVG

Le code généré est à l'intérieur du conteneur SVG (balise non indiquée dans la capture d'écran).

Donc le script modifie le DOM ; ajoute des éléments SVG.
Vous constatez que le SVG ressemble beaucoup à du HTML : chaque instruction basée sur une balise ; chaque balise comprend des attributs.
Notez que la définition d'un dégradé en SVG est relativement lourde d'où l'intérêt de passer par Snap.svg.

Je n'en dis pas plus sur Snap.svg pour l'instant puisque ce tuto comprend plusieurs chapitres sur ce framework (voir sommaire du tuto).

Les éditeurs WYSIWIG de SVG

Ces programmes produisent des images vectorielles au format SVG à partir d'une interface : on dessine et en arrière plan du code SVG est généré. Vous obtenez un fichier d'extension .svg.
Citons entre autres : Illustrator, Inkscape, Boxy SVG. Illustrator est le plus performant mais il est payant ...
Inkscape est gratuit, Boxy SVG est une application en ligne proposée par Google.

L'inconvénient de ces logiciels est qu'ils génèrent des dessins statiques.
Il faut donc "mettre les mains dans le code" pour parvenir à certains objets du document SVG. D'où l'intérêt d'avoir de bonnes connaissances dans le langage SVG pour s'y retrouver dans ce code SVG

Vous trouverez dans mon site un tuto complet sur Inkscape : Inkscape - éditeur WYSIWYG de SVG

Les banques d'images SVG

Il existe de nombreuses banques de fichiers SVG dont certaines sont gratuites.
Citons entre autres : SVG clipart, Devient art, SGV studio, hello SVG, svgrepo.com.

Ci-dessous une image vectorielle récupérée sur l'un des sites cités :

Pour insérer cette image vectorielle (ce fichier d'extension .svg) dans une page web, il suffit d'utiliser la balise IMG (comme pour une image matricielle). Le code est tout simplement :
< img src ="ordinateur.svg" class ="centre" alt ="dessin vectoriel" >

Je ne me suis pas contenté de "piquer" ce document SVG sur la "toile".
Je l'ai ouvert avec Inkscape, j'ai ajouté une zone de texte et j'ai sauvegardé au format optimisé (il ne pèse plus que 300 KO au lieu de 500 KO).

SVG version 2

La version 2 de SVG commence seulement à être implémentée par le navigateur Google Chrome.
L'animation via CSS (plutôt qu'avec le SMIL ou JavaScript) s'imposera alors. En effet, parmi les nouveautés de cette version, tous les paramètres géométriques (de taille et de position tels with ,height ,r, rx ,ry ,x ,y ,cx ,cy , etc.) peuvent être passés en propriétés CSS et donc être manipulés dans le cadre d'un modèle d'animation CSS (règle @keyframes).
L'animation d'objets SVG sera fortement simplifiée ; il suffira de maitriser CSS 3 et en particulier le module relatif aux transitions et animations.

Un document SVG, c'est quoi ?

Faites un clic droit sur l'une des deux images SVG de cette page. Comme pour une image bitmap vous pouvez l'enregistrer sur votre ordinateur puisque le menu contextuel vous propose la commande "Enregistrez l'image sous".
Faites le avec la première image ! Vous récupérez sur votre machine un fichier nommé rue.svg.
Essayez de l'ouvrir avec le logiciel PAINT ; vous avez un message d'erreur :" Paint ne peut pas lire ce fichier. Format non pris en charge" ; En effet Paint ne peut ouvrir que les images "pixellisées" ou matricielles : gif,png, jpg).

Essayez maintenant d'ouvrir "rue.svg" avec un éditeur de textes tel NOTEPAD. Vous pouvez l'ouvrir et vous voyez le code SVG.
Vous constatez que le SVG ressemble beaucoup à du HTML : langage de balisage.

Essayez ensuite d'ouvrir le fichier avec Inkscape (un éditeur SVG de type WYSIWIG) ; l'image apparait et vous pouvez la modifier via l'interface WYSIWYG de ce logiciel.

Un document SVG peut contenir non seulement du code SVG mais aussi une feuille de style en CSS et des scripts.
Je peux vous assurer que mes fichiers SVG ne comprennent pas de JavaScript malveillant. Vous pouvez donc les télécharger en toute tranquillité.

SVG : pourquoi apprendre ce langage ?

Certains esprits brillants mais paresseux peuvent faire remarquer qu'il n'est peut-être pas utile d'apprendre la syntaxe SVG alors que des logiciels de dessin vectoriel génèrent du code à ce format.
Certes, mais ni Inkscape, ni Adobe Illustrator ne sont capables de générer du code correspondant à des animations.
Par contre, si vous avez de bonnes notions en SVG, vous pourrez compléter le code d'un document Inkscape afin d'animer certains éléments de ce fichier comme je l'ai fait ci-dessous avec la "croix de Lorraine".

Certains feront remarquer que lorsque l'on veut dessiner dans une page web, on peut aussi utiliser l'API Canvas.
Canvas et SVG sont en effet deux outils qui permettent depuis HTML5; de dessiner directement dans la page web.
Cependant SVG présente un gros avantage par rapport à Canvas ; les objets dessinés en SVG sont des noeuds du DOM (ce qui n'est pas le cas des formes dessinées avec Canvas).
Il y a dans mon site un tuto sur l'API Canvas : API Canvas

Démonstration par l'exemple

Observez l'image vectorielle animée ci-dessous.
La croix de lorraine change de couleur : bleu puis blanc puis rouge et le cycle reprend dans l'ordre inverse.

Pour obtenir cette animation j'ai d'abord utilisé le logiciel de dessin Inkscape.
Puis j'ai ouvert ce document Inkscape avec un éditeur de textes (NotePad par exemple) et j'ai effectué diverses modifications et en particulier j'ai rajouté une feuille de style interne (incluant un modèle d'animation).
J'ai aussi modifié le code de l'instruction SVG début afin de rendre cette image "responsive" (largeur d'affichage de l'image affichée en % et non plus en pixels).
Pour terminer j'ai intégré ce document Inkscape dans la page via la balise double IFRAME.

Installez une extension de windows

Si vous utilisez un PC sous windows je vous conseille d'installer une extension appelée SVG Viewer Extension for Windows Explorer. Sinon il n'est pas possible de prévisualiser les images vectorielles.
Ci-dessous aperçu d'un dossier lorsque l'extension n'est pas installée :

Les fichiers SVG sont visualisés par le logo de Chrome (mon navigateur par défaut).

Ci-dessous aperçu d'un répertoire lorsque l'extension est installée :

Les documents SVG apparaissent sous forme de miniatures (à condition d'avoir demandé l'affichage sous forme d'icônes).