Catégorie : Graphisme     Tags :      0 Commentaire

      Retrouvez cet article dans : Linux Pratique 48

    Dans le numéro précédent, vous avez pu découvrir et vous familiariser avec le format SVG, un langage basé sur XML, qui permet de décrire des dessins vectoriels en deux dimensions. Après avoir visualisé la structure de base d’un document SVG, ainsi que la description de divers éléments (formes géométriques, chemins, liens, gradients de couleur, texte, images), nous irons un peu plus loin ici en abordant les styles et transformations que l’on peut affecter aux objets SVG, pour finir par les animations grâce au SVG dynamique.

    Styles et CSS

    Comme vous avez déjà pu le remarquer dans les exemples déjà présentés, SVG permet d’affecter des styles aux éléments. Tout comme en X/HTML, ceci est réalisable de deux manières différentes :

    • via l’utilisation de l’attribut style qui permet de déclarer le style dans la balise de l’élément lui-même ;
    • via l’utilisation de l’attribut class, qui permet de référencer un style prédéfini dans une feuille de style CSS interne ou externe (via une instruction <?xml-stylesheet?>).

    Exemples :

    /img-articles/lp/48/art-3/t1.jpg

    Transformations

    SVG possède un système de transformations applicables aux objets ou groupes d’objets déclarés. Il s’agit en fait de transformations mathématiques entre systèmes de coordonnées. SVG propose les transformations suivantes :

    • translate(x,y) : translation de l’élément aux coordonnées (x,y) ;
    • scale(Nx,Ny) : mise à l’échelle avec les ratios Nx pour les abscisses et Ny pour les ordonnées (par défaut Nx=Ny) ;
    • rotate(deg,cx,cy) : rotation de deg degrés, à partir du point (cx,cy) (par défaut ce point est l’origine du système de coordonnées courant) ;
    • skewX(deg) et skewY(deg) : inclinaison sur l’axe des abscisses ou des ordonnées ;
    • matrix(a b c d e f) : transformation mathématique de changement de coordonnées, correspondant à la formule matricielle suivante :

    /img-articles/lp/48/art-3/fig-1.jpg

    /img-articles/lp/48/art-3/t2.jpg

    Exemples : voir tableau 2.

    Mixage avec du XHTML

    Un des intérêts du langage SVG est qu’il peut être mixé ou imbriqué avec d’autres langages XML, comme le XHTML. Ainsi, à condition que le navigateur Web le supporte (ce qui est le cas de Firefox par exemple), il est possible de mélanger dans un même document XML des éléments XHTML et SVG en utilisant des namespaces (espaces de noms) différents, voire mieux, comme on le verra plus loin dans cet article, d’interagir avec les objets SVG depuis du code JavaScript inclus dans la page XHTML.
    Pour ce faire, il est nécessaire d’indiquer au client le bon type MIME, qui est : application/xhtml+xml. Cela peut être fait en modifiant la configuration de votre serveur Web ou en modifiant l’en-tête HTTP envoyé par chaque page via un langage comme PHP (Tab. 3)

    /img-articles/lp/48/art-3/t3.jpg

    SVG dynamique

    Scripts et évènements

    SVG implémente la norme DOM2 du W3C et est donc manipulable via JavaScript de manière similaire à
    X/HTML. Ainsi, chaque élément d’un document SVG et chaque attribut d’un élément pouvent être dynamiquement modifiés.
    En outre, SVG dispose d’un système d’évènements similaire à X/HTML. On retrouve notamment les classiques onload, onunload, onclick, omouseup, onmousedown, onmouseover, onmousemove, onmouseout,... mais aussi des évènements plus spécifiques, comme ceux relatifs aux animations : onbegin, onend, onrepeat.

    L’exemple suivant modifie la couleur d’un élément SVG lorsque l’utilisateur clique dessus :

    /img-articles/lp/48/art-3/fig-2.jpg

    <?php
      header("Content-type: application/xhtml+xml");
    ?>
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
      <body>
        <h3>Cliquez sur le cercle</h3>
        <svg xmlns="http://www.w3.org/2000/svg" width="300" height="200">
          <circle id="monDessin" cx="70" cy="70" r="40" stroke="black" stroke-width="2" fill="red"/>
          <script>
            <![CDATA[
            function doClick(e) {
              document.getElementById("monDessin").setAttribute("fill", "blue");
              alert(e.type);
            }
            document.getElementById("monDessin").onclick = doClick;
            ]]>
          </script>
        </svg>
      </body>
    </html>

    Animations

    La norme SVG contient également la définition d’animations, inspirées du langage SMIL (Synchronized Multimedia Integration Language) défini par le W3C. Les animations consistent en des changements de valeurs d’attributs d’éléments (ou de groupes d’éléments). Il s’agit d’animations basées sur le temps et non sur des frames comme dans la technologie Flash. Il faut donc indiquer le départ et la durée de chaque animation, qui peut alors faire varier n’importe quel attribut SVG. Les animations peuvent en outre se dérouler en parallèle et être déclenchées par des évènements utilisateurs.
    Les animations ne sont pas (encore) supportées par tous les clients SVG. Le tableau suivant fait le point sur ce sujet.

    /img-articles/lp/48/art-3/t4.jpg

     SVG dispose de plusieurs balises dédiées aux animations, à insérer dans l’élément à animer :

    • animate : variation d’un attribut au cours du temps ;
    • set : modification simple d’un attribut pour une durée spécifiée ;
    • animateColor : transition de couleur au cours du temps ;
    • animateMotion : déplacement de l’élément le long d’un chemin (cf. <path> décrit plus haut) ;
    • animateTransform : contrôle de l’application de transformations SVG sur l’élément (cf. <transform> plus haut).

    Exemples : voir tableau 5.

    /img-articles/lp/48/art-3/t5.jpg

    Dans les exemples précédents, les animations sont déclenchées au bout d’un certain nombre de secondes, précisé via l’attribut begin. Il est également possible
    d’associer ce déclenchement à un évènement utilisateur, par exemple avec begin=’’mouseover’’.
    Des animations plus complexes peuvent être obtenues en parallélisant des animations simples. Les animations disposent de nombreux paramètres pour contrôler leurs déroulés et leurs enchaînements. Ils ne sont pas détaillés ici par souci de concision et de simplification.

    Conclusion

    Cette brève introduction au langage SVG n’avait pas pour but d’être exhaustive. Ainsi, un certain nombre d’éléments n’ont pas été abordés, comme les motifs (objets réutilisables pour le remplissage), les filtres (comme les flous gaussiens), les markers (objets graphiques utilisés en terminaison d’un tracé, par exemple une flèche à la fin d’une ligne), les techniques de clipping, de masking et de composition.
    SVG est un langage puissant, au centre de l’enjeu actuel de disposer d’un internet graphique ouvert et standardisé. Outre le support de l’audio et du pré-téléchargement, ses manques par rapport au format propriétaire Flash sont surtout au niveau des animations.
    Espérons donc que, dans un futur proche, les clients SVG supporteront mieux les animations et que des outils libres de conception d’animations verront le jour !

    Liens

    • La norme SVG : http://www.w3.org/Graphics/SVG/
    • Le wiki de svg.org : http://wiki.svg.org
    • L’éditeur Inkscape de SVG statique : http://www.inkscape.org
    • L’archive publique de cliparts SVG : http://www.openclipart.org

    Des exemples d’utilisation de SVG dynamique sur le Web :

    • Montre analogique : http://www.jasonkarldavis.com/scripts/svgclock/clock-moz.svg
    • Jeu Tetris : http://croczilla.com/svg/samples/svgtetris/svgtetris.svg

      Retrouvez cet article dans : Linux Pratique 48

    Posté par Raphaël Semeteys (Raph) | Signature : Raphaël Semeteys | Article paru dans Creative Commons License

    Laissez une réponse

    Vous devez avoir ouvert une session pour écrire un commentaire.