Le SVG sur la page, le téléphone et le papier
Écrire un fichier SVG et obtenir qu'un programme particulier le dessine sont deux problèmes différents. Le format a été spécifié des années avant qu'il soit prudent de supposer que le navigateur d'un visiteur l'afficherait.
Navigateurs
Konqueror a été le premier navigateur à prendre en charge le SVG dans une version publiée, la 3.2, en février 2004. En 2011, chaque grand navigateur de bureau, et beaucoup de plus petits, en avaient un certain niveau. Les mises en œuvre n'étaient pas également finies. Quelques détails des années difficiles valent d'être gardés, parce que d'anciennes pages emploient encore les anciennes habitudes.
Firefox, de la 1.5 jusqu'à la 3.6, et quelques autres navigateurs de ce temps, n'affichaient le SVG dans une page que s'il était intégré avec object ou iframe, pas avec l'élément img ordinaire. Le SVG pouvait aussi être inclus dans le XHTML par le moyen des espaces de noms XML. Tim Berners-Lee, qui a inventé le web, a critiqué publiquement les premiers Internet Explorer pour n'avoir aucune prise en charge du format. Opera a le SVG Tiny depuis la version 8. Opera 9 a ajouté SVG Basic et une partie du langage 1.1 complet. Opera 9.5 avait une prise en charge partielle de Tiny 1.2, et il dessinait les fichiers SVGZ compressés. Les navigateurs sur le moteur Gecko, Firefox parmi eux, ont une prise en charge incomplète de la spécification 1.1 complète depuis 2005. Gecko 1.9, dans Firefox 3.0, a ajouté une tranche de plus, filtres compris. Pale Moon, sur le moteur Goanna, un fork de Gecko, prend en charge le SVG. Les navigateurs WebKit, Safari, Chrome et OmniWeb parmi eux, ont une prise en charge incomplète de la 1.1 complète depuis 2006. Amaya en avait une prise en charge partielle.
Internet Explorer 8 et les versions plus anciennes ne dessinent pas le SVG. IE9, sorti le 14 mars 2011, prend en charge l'ensemble de fonctions de base. IE10 a ajouté les filtres de SVG 1.1. Microsoft Edge Legacy prend en charge SVG 1.1. Le navigateur en nuage Maxthon aussi. La prise en charge native, une fois qu'elle est vraiment complète, a trois avantages que les greffons n'ont jamais tout à fait tenus. Rien de plus n'a à être installé. Le SVG peut se mêler librement au reste du contenu dans un seul document. Le rendu et les scripts deviennent nettement plus fiables, parce qu'il y a un moteur, plutôt qu'une négociation entre deux.
Téléphones
Sur un téléphone, la prise en charge se limitait souvent à SVG Tiny, ou bien elle était limitée par le système d'exploitation plutôt que par les ambitions du navigateur. Adobe Flash Lite pouvait, en option, dessiner Tiny à partir de la version 1.1. À la conférence SVG Open de 2005, Sun a montré une mise en œuvre de Tiny 1.1 pour la Connected Limited Device Configuration, une petite plateforme Java. Opera Mobile, et le navigateur de l'iPhone, comprenaient le SVG. Le navigateur Android, non, avant la version 3.0, Honeycomb, bien que ce navigateur employât WebKit. Avant Honeycomb, Firefox Mobile 4.0 beta 2 a été le premier navigateur tournant sur Android à prendre en charge le SVG par défaut.
La part de Tiny qu'un téléphone donné mettait en œuvre variait avec le moteur qu'il embarquait. Beaucoup de téléphones plus tardifs ont ajouté le dégradé et l'opacité au-delà de Tiny 1.1. On a parfois appelé cela « SVGT 1.1+ ». Il n'existe pas de telle norme. BlackBerry a Tiny 1.1 intégré depuis OS 5.0, et le navigateur Torch, fondé sur WebKit, l'a gardé dans OS 6 et 7. La plateforme S60 de Nokia dessine avec le SVG. Les icônes de cette plateforme sont en général rendues par le moteur SVG. Nokia a mené le groupe qui a écrit JSR 226, l'API Java ME pour présenter et manipuler le SVG, mise en œuvre à partir de S60 3rd Edition Feature Pack 1. Certains téléphones Series 40, le Nokia 6280 parmi eux, le dessinent aussi. La plupart des téléphones Sony Ericsson à partir du K700 prennent en charge Tiny 1.1. À partir du K750, ils ajoutent l'opacité et les dégradés. Les téléphones sur la Java Platform 8 de Sony Ericsson prennent en charge JSR 226. Windows Phone prend en charge le SVG depuis la version 7.5. Des combinés de Motorola, Samsung, LG et BenQ-Siemens l'ont aussi livré. eSVG, une bibliothèque de rendu visant les appareils embarqués, se rencontre sur certaines de ces plateformes.
En 2003, le 3GPP, le partenariat qui spécifie les télécommunications mobiles, a adopté SVG Tiny comme format vectoriel obligatoire pour la génération de téléphones suivante. Tiny est exigé, et Basic est facultatif, pour la messagerie multimédia et pour la diffusion en flux à commutation de paquets. Il a plus tard été exigé pour le graphisme vectoriel dans l'IP Multimedia Subsystem. Aucun des deux profils mobiles ne comprend le modèle objet de document complet. Seul Basic a un script facultatif. Comme les profils sont des sous-ensembles propres, une grande part du SVG ordinaire se dessine encore sur un appareil qui ne met en œuvre que le profil. Tiny 1.2 ajoute un micro DOM, le style et le script, et quelques fonctions que 1.1 n'a pas, dont des traits qui ne changent pas d'échelle avec le dessin. Certaines mises en œuvre de 1.1, Opera, Firefox et WebKit parmi elles, ont tout de même acquis ces traits. Quand les navigateurs de téléphone et ceux de bureau en sont venus à partager du code, le SVG 1.1 complet a déplacé Tiny 1.2 dans la pratique. Le petit profil avait été un pont. Le pont n'était plus la route.
Compression, création et autres programmes
Le SVG est du XML, donc il se répète. Un nom de balise qui apparaît deux cents fois est un cadeau pour un compresseur sans perte. Quand le fichier a été compressé par gzip, on l'appelle SVGZ et il porte l'extension .svgz. Une visionneuse SVG 1.1 conforme affichera le fichier compressé. Un SVGZ fait d'ordinaire de 20 à 50 pour cent de la taille d'origine. Le W3C publie des fichiers SVGZ dans ses tests de conformité, donc « votre visionneuse ouvre-t-elle un fichier compressé » est une question dont la bonne réponse est connue.
On peut écrire le balisage à la main. On peut aussi employer un éditeur vectoriel : Inkscape, Adobe Illustrator, Adobe Animate, CorelDRAW. Les mêmes programmes peuvent rastériser le résultat en PNG. Inkscape et Boxy SVG peuvent retracer une image matricielle en courbes de Bézier, avec des moteurs tels que potrace, autotrace et imagetracerjs. Le tracé est un dessin nouveau, pas la photographie stockée plus habilement. Le détail fin devient une décision politique sur le nombre de courbes que l'on accepte de garder.
Des bibliothèques dessinent le SVG à l'intérieur d'autres programmes. librsvg est employé par GNOME depuis 2000. Batik est la mise en œuvre Java. ThorVG, à partir de 2020, vise des systèmes plus légers. ImageMagick, le convertisseur en ligne de commande, emploie librsvg et peut écrire de l'autre côté les formats matriciels usuels. Pour une application web, le mode qui compte est le SVG en ligne : un élément svg dans le document HTML. Le dessin partage alors les événements de la page et son CSS, et c'est pourquoi le SVG sert à des parties d'interface, pas seulement à des illustrations. Un bouton qui est un dessin peut être mis en forme avec la même feuille de style que le texte à côté de lui.
Hors du navigateur, le SVG est intégré au traitement de texte, LibreOffice pour l'un, et à la publication assistée par ordinateur, Scribus pour l'un. gnuplot peut en émettre. Des tracés peuvent être importés dans le GIMP ou dans Blender. Microsoft 365 et Office 2019 peuvent importer, exporter et éditer le SVG. Sur les systèmes Apple, l'identifiant de type est public.svg-image, et il se conforme à la fois à public.image et à public.xml, ce qui est un résumé net du format entier. Il existe même une méthode d'atelier, qui se sert de la fonction de concaténation d'un tableur, pour coller des nombres et des noms de balises en un document SVG fini. Cela marche. C'est un rappel que le fichier est du texte.
Sous Windows, l'Explorateur de fichiers ne dessine pas, depuis des années, les miniatures SVG par lui-même. On ajoute une extension d'aperçu, ou l'on emploie un gestionnaire de fichiers qui comprend déjà le format. Un navigateur est une autre question. Le navigateur dessine le fichier. L'interface du bureau, souvent, non, et les deux faits surprennent quiconque les rencontre le même après-midi.
Un document, pas un instantané
Le SVG peut héberger un script ou une feuille de style, de la même façon qu'un document HTML. Cela devient un problème quand un inconnu peut téléverser un SVG, une photo de profil par exemple, et que le site traite ce téléversement comme une image ordinaire. Si ce fichier sert ensuite de fond CSS, de logo, ou dans une galerie, le navigateur peut exécuter le script en chargeant l'image. Un fichier hostile peut bloquer le navigateur en lui imposant une quantité de travail absurde. Il peut aussi mener à une injection HTML et au cross-site scripting. Le W3C pose donc des exigences supplémentaires pour le cas où le SVG est employé simplement comme une image.
Le SVG en ligne, un élément svg qui fait partie de la page, est un autre cas. Le W3C le traite comme moins surprenant, parce que le contenu fait partie d'un document plus large et qu'un script sur cette page est attendu. La règle pratique est courte. Ne pas accepter un SVG téléversé et le resservir comme une image de confiance, sauf si le fichier a été vérifié. Le détail de ces vérifications est dans les règles du W3C pour le SVG employé comme image.
Un cousin parmi les normes mérite d'être nommé. MPEG-4 partie 20, Lightweight Application Scene Representation et le Simple Aggregation Format, repose sur SVG Tiny. Il a été publié comme ISO/IEC 14496-20:2006. Il ajoute ce qu'un service mobile veut : des mises à jour dynamiques, un codage binaire, une façon compacte de transporter des polices. Le SVG apparaît aussi dans MPEG-4 partie 11, dans la représentation textuelle XMT. Le format du web et le format du multimédia mobile sont parents. Ce que contient le fichier est le même vocabulaire dans les deux cas. Où le graphisme sert est la raison plus ancienne pour laquelle tout cela valait d'être normalisé : une image petite et nette, répétée partout où une page a besoin d'un signe.
