Article SVG - Scalable Vector Graphics - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Article SVG - Scalable Vector Graphics (/showthread.php?tid=8218) |
SVG - Scalable Vector Graphics - Xenos - 14-09-2020 SVG - Scaled Vector Graphics Disclaimer Loin d'être un expert du SVG, je vais tenter d'effleurer la surface de ce standard. Vous ne trouverez pas sur cette page une description exhaustive de tout ce qu'il peut vous apporter mais juste une initiation et quelques trucs qui, j'espère, vous donneront quelques idées et vous feront entrevoir ses possibilités. Le Standard SVG Le SVG (Scaled Vector Graphique) est né de la fusion de deux mondes différents. Celui du VML (Microsoft) et du PGML (Adobe). A partir de ces deux source, le W3C commença à travailler sur le standard SVG en 1998. Sous-famille du XML, il permet de réaliser des dessins vectoriels et des animations via Javascript ou SMIL. Il existe différents standards pour le SVG.
Désavantages Autant commencer par les choses désagréables. Support Malgré son âge avancé, ce format n'est pas encore pleinement supporté par tous les navigateurs. Internet Explorer requiert un plugin pour le faire fonctionner, FireFox ne supporte pas les fonctions d'animations SMIL, Webkit (Chrome, Safari) contient quelques gros bugs. Seul Opera semble pour le moment tirer son épingle du jeu. Accessibilité Le SVG étant en gros un langage pour faire des dessins, ses possibilités sont limitées. Pas de supers effets à la Photoshop, pas de dessins complexes, code source verbeux rendant le source parfois plus gros qu'un PNG, cela demande tout de même de l'investissement et un soupçon d'ingéniosité pour profiter des fonctionnalités offertes par ce standard. Avantages Oui, il y en a ! Bah oui. Dans le cas contraire, je ne me fatiguerais pas à faire une page de Wiki dessus. Interfaçable via Javascript Etant basé sur le XML, le SVG possède tout un DOM qu'il est possible de modifier / atteindre par le biais de JS. Intégration SMIL En version 3.0 chez le W3C depuis Janvier 2008, ce standard permet de réaliser des animations de transition, mouvement avec un timing précis. CSS Compatible Les éléments du SVG peuvent répondre aux règles de mise en page définies dans une feuille de style CSS. Support grandissant C'est officiel, Microsoft intégrera un support SVG natif dans IE9. Les développeurs de Firefox espèrent intégrer bientôt le support SMIL et WebKit corrige en permanence les bugs. Comment ça marche Comme expliqué plus haut, le SVG fait partie de la grande famille XML. Cela signifie qu'il est composé tout simplement de balises et d'attributs. Structure En général, les logiciels de dessin vectoriel (inkscape, Illiustrator) permettent de sauvegarder les images en SVG. En ouvrant le fichier ainsi sauvegardé avec un éditeur de texte, on peut facilement observer la structure du fichier
On retrouve la déclaration XML, le DOCTYPE et la balise SVG qui contiendra la définition de l'image. Les attributs width, height définissent la taille de l'affichage dans la page HTML. viewbox spécifie les dimensions de la zone de dessin. si par exemple vous spécifiez une viewbox de 100 x 100 pixels et une viewbox de 1000 sur 1000, il faudra spécifier les coordonnées d'affichage des éléments dans un espace de 1000 pixels sur 1000 pixels. Le moteur de rendu SVG se chargera de re-dimensionner le contenu pour le faire tenir dans l'espace spécifié par height et width. La définition du NameSpace xlink est essentielle pour référencer des éléments internes ou externe au fichier (explications plus bas) Attributs essentiels Avant de commencer, il est nécessaire de connaîtres quelques attributs qui permettront de donner de la couleur et de la forme aux éléments.
Les couleurs peuvent être exprimées sous forme de nom (white, black), de code HTML (#552299) ou définies à “none” s'il n'y en a pas. Principaux tags Autant rentrer dans le vif du sujet et voir les quelques tags simples qui permettent de créer quelques formes vectorielles Cercle Trois attributs sont nécessaires pour tracer un cercle
{attachment /85e03f3a1b25b62def1eadcce2b6726c0.svg} Ellipses Pour les ellipses, il faut spécifier le rayon X et le rayon X. On a donc 4 attributs.
{attachment /85e03f3a1b25b62def1eadcce2b6726c1.svg} Rectangle Les rectangles sont définis par leurn position X et Y ainsi que leur largeur et hauteur. Cependant, il existe deux autres attributs permettant de faire des effets de coins arrondis
{attachment /85e03f3a1b25b62def1eadcce2b6726c2.svg} Ligne Une ligne est tout simplement composée de deux paires de coordonnées
{attachment /85e03f3a1b25b62def1eadcce2b6726c3.svg} Polylines Les polylines sont composées d'une suite de coordonnées représentant les divers points permettant de tracer une ligne. Tout est exprimé dans l'attribut points.
La forme restera ouverte mais il est nécessaire de spécifier l'attribut fill en le mettant à “none” pour le remplissage.
{attachment /85e03f3a1b25b62def1eadcce2b6726c4.svg} Polygones Les polygones sont de simples formes fermées dont les points sont reliés par des lignes droites. Leur syntaxe est identique à celle de polyline excepté que la forme est automatiquement fermée en reliant le dernier point tracé au premier.
{attachment /85e03f3a1b25b62def1eadcce2b6726c5.svg} Path Path est l'élément central par excellence. C'est celui qui permet de réaliser des formes courbes selon les méthodes de dessin propres au vectoriel. L'attribut principal du path est d
Cet attribut est une suite de commandes (une simple lettre) suivie de valeurs chiffrées (paramètres) donnant les indications de tracé. D'une manière générale, - les commandes en majuscule indiquent des coordonnées absolues. - les commandes en minuscule indiquent des coordonnées relatives. Voici donc une petite description des commandes que l'on peut trouver dans cet attribut
Jusqu'ici, c'est relativement simple. Maintenant, voyons les courbes
Les paramètres sont x1,y1 x2,y2 x,y. - x1 et y1 sont les coordonnées de contrôle du départ du tracé. - x2 et y2 sont les coordonnées du point de contrôle de la fin du tracé - x et y sont les coordonnées de la fin du tracé.
Les paramètres sont x2,y2 x,y. - x2 et y2 sont les coordonnées du point de contrôle de la fin du tracé - x et y sont les coordonnées de la fin du tracé. Exemple
Le rendu de cette courbe apparait ci dessous en rouge. Les autres éléments montrent les différents points de contrôles et les commandes associées. Cet exemple vient tout droit du W3C. Il a été agrandi pour bien montrer les détails. Les points gris sont les points de contrôles. Le point bleu est le point de contrôle implicitement calculé par l'utilisation de la commande S. {attachment /85e03f3a1b25b62def1eadcce2b6726c6.svg}
Les paramètres sont x1,y1 x,y. - x1 et y1 sont les coordonnées de contrôle du départ du tracé. - x et y sont les coordonnées de la fin du tracé.
- x et x1 sont les coordonnées de la fin du tracé. Voici un autre exemple également en provenance du site du W3C.
{attachment /85e03f3a1b25b62def1eadcce2b6726c7.svg}
- rx et ry sont les rayons x et y de l'ellipse à tracer. - rotation indique l'angle de rotation de l'ellipse sur l'axe des X. - large-arc-flag précise quelle portion de l'arc doit être dessinée (0 pour petit, 1 pour grand) - sweep-flag indique s'il faut tracer dans le sens des aiguilles d'une montre ou à l'inverse (0/1) - x,y sont les coordonnées de fin de traçage de l'arc. Pour y voir plus clair, voici une succession d'arcs, réalisés à partir de la même commande mais en faisant varier les paramètres de tracés
{attachment /85e03f3a1b25b62def1eadcce2b6726c8.svg} Les plus observateurs auront repéré que j'ai utilisé une balise supplémentaire, <g>, qui permet de regrouper les éléments. C'est une part de ce qui fait la force du SVG. Image SVG supporte un tag bien utile permettant d'insérer des images externes avec un format différent
{attachment /85e03f3a1b25b62def1eadcce2b6726c9.svg} Grouper et réutiliser Le tag <g> SVG permet donc de grouper des éléments. Le premier avantage de ce système est qu'il permet de définir des attributs par défaut pour tous les sous éléments. Pour cela on utilise le tag <g>. Il est possible d'avoir autant de groupes et de sous groupes que l'on veut. Les attributs “fils” peuvent bien sur être spécifiés de manière à remplacer ceux définis par le parent.
{attachment /85e03f3a1b25b62def1eadcce2b6726c10.svg} Les définitions <defs> En plus des groupes, les fichiers SVG peuvent renformer des définitions encadrées par le tag <defs>. Ce tag comprends en général tous les éléments qui seront réutilisés dans graphique. Les éléments placés entre les balises <defs> ne seront pas affichés mais ils pourront être référencés, dupliqués et transformés dans le corps du document. On utilisera pour cela les attributs transform e§t xlink:href Transformations et réutilisations La réutilisations s'effectue par le biais de la balise <use> et des attributs id et et xlink:href. Tout élément possédant un id peut être référencé. Il suffit de mettre dans l'attribut xlink:href un lien interne vers l'élément. N'oubliez pas de mettre de spécifier l'attribut xmlns:xlink=“http://www.w3.org/1999/xlink” dans le tag svg principal pour bénéficier de cette fonctionnalité. Prenons par exemple une flèche blanche sur un rond noir
{attachment /85e03f3a1b25b62def1eadcce2b6726c11.svg} <use> permet de prendre un groupe identifié par un id dans <defs> (ou ailleurs dans le document) et de l'afficher. Par défaut, l'élément s'affiche comme spécifié dans sa définition. Mais en utilisant l'attribut transform, il est possible de faire bien plus de choses. transform est un attribut dont la valeur peut prendre plusieurs commandes
Avec l'image donnée précédemment et quelques fonctions de transformation, on peut facilement construire quelque chose de plus intéressant en économisant les lignes.
{attachment /85e03f3a1b25b62def1eadcce2b6726c12.svg} Transformation d'Images Les images provenant d'autres formats et intégrées au SVG peuvent aussi subir des transformations.
{attachment /85e03f3a1b25b62def1eadcce2b6726c13.svg} C'est par exemple assez utile pour dupliquer une image selon différents angles. Les déformations engendrées par de telles transformations restent minimes. Introduction du CSS Comme expliqué plus haut, le SVG supporte le CSS pour la mise en forme On peut utiliser un fichier externe ou recourir aux définition interne via la balise style. Même les pseudo classes (comme :hover) sont accessibles.
{attachment /85e03f3a1b25b62def1eadcce2b6726c14.svg} L'utilisation des styles et des pseudo classes permet de faire quelques effets intéressants. Une fois le SVG chargé, tout y est. Pas de précache à gèrer. On peut agir sur d'autres attributs comme le contour par exemple.
{attachment /85e03f3a1b25b62def1eadcce2b6726c15.svg} Vaisseau {attachment /85e03f3a1b25b62def1eadcce2b6726c16.svg} |