Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Dans ce chapitre je vais vous montrer quelques astuces pour obtenir un code SVG clair et succinct malgré les limites des éditeurs WYSIWIG tels Inkscape et Boxy SVG.
Je ne reviens pas sur l'absence de l'outil "calques" dans Boxy SVG. Je vous rappelle tout simplement qu'un calque en Inkscape
se traduit par le conteneur G avec une identifiant et souvent avec l'attribut style et incluant différents objets.
La balise G début comprend aussi l'attribut style pour préciser que l'état visible ou pas du calque (donc des ses composants).
J'ai déjà signalé l'incapacité de Inkscape et Boxy de générer le code correspondant à des animations.
Je vous renvoie au chapitre 18 : Animer les documents SVG
Lorque vous importez une image matricielle dans un document SVG, vous pouvez souhaitez l'incorporation plutôt que la liaison.
L'avantage de l'incorporation est que le document SVG est indépendant de l'image d'origine.
Ce qui n'est pas le cas avec la liaison : si vous déplacez le document SVG il faut déplacer l'image également.
Dans un document SVG nous voulons importer la même image quatre fois.
Une utilisation maladroite d'un éditeur graphique peut générer un code inutilement lourd.
Donc sous Inkscape ou Boxy SVG, j'importe l'image par incorporation (sous Boxy je n'ai pas le choix).
Je dimensionne l'image incorporée (300 par 200)
Puis je duplique l'image 3 fois.
Le code SVG du document Boxy obtenu :
L'image est "rastérisée" 4 fois !!!
Avec la même procédure, Inkscape produit aussi une abérration : quatre fois la "rastérisation" de l'image.
L'astuce consiste à importer (par incorporation) l'image une fois puis à encoder manuellement.
Le code du document Boxy complété :
Je suis obligé de cloner 4 fois (et non pas 3 fois) le modèle d'image car dès qu'un objet est intégré dans la partie DEFS, il disparait du canevas !
Le code du document Inkscape complété :
Je n'ai pas eu à rajouter l'espace de nom xmlns:xlink dans la balise SVG car il y figurait déjà.
L'instruction <?xml version="1.0" encoding="utf-8"?> est absente sous Inkscape.
Sous Inkscape l'élément IMAGE reste une balise simple.
Dans un document nous voulons importer quatre fois la même image (avec une seule "rastérisation") mais de plus nous voulons que les deux copies du haut soient détourées par un losange et celles du bas par une ellipse.
Si vous faites appel à un éditeur WYSIWIG il va générer dans la partie DEFS quatre CLIPPATH avec des coordonnées en absolu.
En encodant manuellement je n'aurai besoin que de deux CLIPPATH dans lesquels les coordonnées de la découpe sont exprimées
en relatif c'est à dire par rapport à l'image elle-même.
Je vous montre ici que l'encodage d'un CLIPPATH (modèle de découpe) en relatif c'est pas très compliqué.
Notez dans chaque balise CLIPPATH l'attribut clipPathUnits="objectBoundingBox". Ce qui signifie que les coordonnées de l'objet de découpe pourront être exprimées en relatif : par rapport à l'image à découper.
En ce qui concerne les coordonnées de la balise POLYGON dans la première définition je vous renvoie à mon tuto sur le langage SVG : La balise CLIPPPATH
Boxy SVG ne propose pas d'outil de vectorisation des images matricielles.
Donc pour vectoriser une image matricielle vous ètes obligé de passer par Inkscape.
Mais rien n'interdit ensuite d'insérer une image vectorielle dans un document Boxy ...
Ci-dessous un document Boxy contenant deux vectorisations réalisées sous Inkscape :
Dans chacun des deux documents Inkscape vous pouvez supprimer l'instruction IMAGE pour ne garder que les chemins (un chemin par passe).
Le code du premier document Inkscape après édition :
Il y a 8 chemins (vectorisation en couleurs avec 8 passes)
Le code du deuxième document Inkscape après édition :
Le document SVG obtenu est relativement lourd (près de 600 KO) mais c'est logique car chaque image vectorielle pèse près de 300 KO.