Encodage SVG inline · Gratuit

Convertisseur SVG en data URI

Encodez du code SVG en data URI à intégrer dans une feuille de style ou une balise img. Les deux encodages sont générés en direct, comparés en octets et prévisualisés tels que le navigateur les chargera réellement.

Encodé dans votre navigateur · Aucun import, aucun compte
Signaler un problème

Source

Code SVG

466 B de code

2 MB maximum · lu dans cet onglet · jamais importé

Nettoyer d'abord le code

Supprime les commentaires et la déclaration XML, retire les espaces entre les balises et replie les sauts de ligne que les logiciels d'export laissent entre les attributs. Les attributs, les données de tracé et les données textuelles dans text, tspan, title, desc et style restent exactement tels quels. Ce n'est pas un optimiseur : aucune réécriture de tracés à la manière de SVGO, aucune réduction de précision ni aucun élagage d'attributs n'a lieu ici.

97 B supprimés · 466 B → 369 B

Aperçu

Rendu depuis la data URI

L'image ci-dessous est chargée depuis l'URI encodée elle-même : elle échoue donc exactement comme le ferait votre page.

Aperçu en direct du SVG encodé
width
24
height
24
viewBox
0 0 24 24

Espace de noms déclaré, taille définie, assez léger pour être intégré. Assez petit pour tenir dans une feuille de style ou un composant sans en changer sensiblement la taille.

Taille

Ce que coûte chaque encodage

Taille en octets du code source et de chaque data URI encodée
FormeOctetsvs SVG
SVG source369–
URI encodée en URL414+12.2%
URI Base64518+40.4%

Ces chiffres incluent le préfixe de l'URI : 19 octets pour la forme simple, 26 pour la forme Base64. Sans le préfixe, le schéma est exact : le Base64 gonfle toute charge utile de +33.3%, car trois octets en deviennent toujours quatre, tandis que l'encodage URL vous coûte ici +7.0%, soit deux octets de plus pour chaque octet qu'il a dû échapper, et rien du tout pour le reste.

Confortable à intégrer : Assez petit pour tenir dans une feuille de style ou un composant sans en changer sensiblement la taille.

Prêt à coller

Quatre sorties, toutes en direct

Chaque champ ci-dessous se met à jour pendant que vous modifiez le code ci-dessus. Rien n'est généré sur un serveur, donc rien n'a besoin d'être rechargé.

Guillemets d'encadrement
Extraits en
Data URI encodée en URLRecommandée

414 octets · +12.2% par rapport au code

data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none"%3E%3Crect x="2.5" y="4" width="19" height="16" rx="3.5" stroke="%237051bd" stroke-width="1.5"/%3E%3Cpath d="M3 16.6 8.6 11l4 4 3-2.6 5.4 4.6" stroke="%237051bd" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/%3E%3Ccircle cx="15.6" cy="8.8" r="1.75" fill="%237051bd"/%3E%3C/svg%3E

Data URI Base64

518 octets · +25.1% par rapport à la forme encodée en URL

data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSJub25lIj48cmVjdCB4PSIyLjUiIHk9IjQiIHdpZHRoPSIxOSIgaGVpZ2h0PSIxNiIgcng9IjMuNSIgc3Ryb2tlPSIjNzA1MWJkIiBzdHJva2Utd2lkdGg9IjEuNSIvPjxwYXRoIGQ9Ik0zIDE2LjYgOC42IDExbDQgNCAzLTIuNiA1LjQgNC42IiBzdHJva2U9IiM3MDUxYmQiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48Y2lyY2xlIGN4PSIxNS42IiBjeT0iOC44IiByPSIxLjc1IiBmaWxsPSIjNzA1MWJkIi8+PC9zdmc+

Utilisez-la quand une étape de build, un champ de CMS ou un préprocesseur réécrit les signes pourcentage et casse la forme lisible.

Déclaration CSS

Utilise l'URI encodée en URL

background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none"%3E%3Crect x="2.5" y="4" width="19" height="16" rx="3.5" stroke="%237051bd" stroke-width="1.5"/%3E%3Cpath d="M3 16.6 8.6 11l4 4 3-2.6 5.4 4.6" stroke="%237051bd" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/%3E%3Ccircle cx="15.6" cy="8.8" r="1.75" fill="%237051bd"/%3E%3C/svg%3E');

Collez-la telle quelle dans une règle. Gardez les guillemets : la charge encodée en URL contient des espaces littéraux, qu'un url() sans guillemets n'accepte pas.

Balise img HTML

Dimensions 24 × 24 tirées des attributs width et height

<img src='data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none"%3E%3Crect x="2.5" y="4" width="19" height="16" rx="3.5" stroke="%237051bd" stroke-width="1.5"/%3E%3Cpath d="M3 16.6 8.6 11l4 4 3-2.6 5.4 4.6" stroke="%237051bd" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/%3E%3Ccircle cx="15.6" cy="8.8" r="1.75" fill="%237051bd"/%3E%3C/svg%3E' width='24' height='24' alt='' />

L'attribut alt est vide, car une forme intégrée est généralement décorative. Donnez-lui un vrai texte dès que l'image porte un sens.

Entourer de guillemets simples ne coûte rien ici : votre code n'en contient aucun, donc tous ses guillemets traversent l'encodeur sans modification.

Intégrez quand c'est la requête qui coûte

Une icône de 700 octets coûte plus en établissement de connexion et en allers-retours qu'en octets. L'intégrer à la feuille de style déjà chargée supprime purement et simplement une requête, c'est pourquoi l'intégration l'emporte pour les petits motifs à usage unique.

Gardez un fichier quand il se répète

Une forme intégrée est copiée dans chaque fichier qui la référence et n'est mise en cache qu'avec ce fichier. Un logo utilisé dans quatre feuilles de style est téléchargé quatre fois ; un .svg partagé est récupéré une fois et réutilisé partout.

Une data URI est une île

Le document encodé ne peut pas sortir de lui-même. Polices externes, images liées, feuilles de style et scripts sont tous indisponibles, et le CSS de la page hôte (y compris currentColor et les propriétés personnalisées) ne franchit jamais la frontière.

Comment ça marche

Une requête en moins, une chaîne à ne pas rater.

Intégrer un SVG échange un aller-retour réseau contre des octets dans un fichier que vous livrez déjà. Le marché est bon pour les petites formes autonomes et mauvais pour tout ce qui est réutilisé sur plusieurs pages : cette page montre donc le coût exact en octets des deux encodages, affiche le résultat avant que vous ne vous engagiez, et signale les deux attributs qui décident si une icône intégrée s'affiche et à quelle taille.

  1. 01

    Chargez le code

    Collez le contenu du fichier .svg ou déposez le fichier lui-même sur le panneau. Il est lu dans cet onglet, et un plafond de 2 MB garde l'encodage instantané.

  2. 02

    Lisez l'aperçu et les avertissements

    L'illustration est dessinée à partir de l'URI encodée sur un damier, pour que la transparence soit visible et qu'un espace de noms manquant apparaisse avant que la chaîne n'atteigne votre feuille de style.

  3. 03

    Prenez la forme dont votre projet a besoin

    Copiez l'URI encodée en URL, le repli Base64, une règle background-image prête à l'emploi ou une balise img complète avec les dimensions déjà renseignées.

Conçu pour les feuilles de style

Une sortie lisible, des mesures honnêtes.

N'échappe que ce qui casserait

Les chevrons, dièses, signes pourcentage, parenthèses, esperluettes, barres obliques inverses et sauts de ligne sont encodés en pourcent. Tout le reste demeure lisible, y compris les espaces et le type de guillemet qui n'entoure pas l'URI.

Le Base64 conservé en repli

Les moteurs de templates et les champs de CMS avalent parfois les signes pourcentage. Pour ces chaînes de traitement, l'URI Base64 est à un clic, avec le surcoût fixe d'un tiers qu'elle entraîne toujours.

L'écart de taille, mesuré plutôt qu'affirmé

Un tableau compare le code aux deux encodages, sépare le préfixe de l'URI de la charge utile et montre pourquoi la forme lisible est presque toujours la plus petite.

Un nettoyage que vous pouvez vérifier

L'étape de nettoyage facultative supprime les commentaires, la déclaration XML et les espaces entre les balises. Les données de tracé, les attributs et les données textuelles ne sont jamais réécrits, et le gain est indiqué en octets.

Repère les deux échecs classiques

Sans xmlns, une data URI ne s'affiche pas du tout ; sans viewBox, une icône se retrouve à la mauvaise taille. Les deux cas sont signalés à côté de l'aperçu plutôt que dans une console.

Local, et discret

Pas d'import, pas de file d'attente, pas d'appel d'API. Le fichier est lu par le navigateur lui-même et encodé en mémoire à partir de ce texte, si bien que vos illustrations inédites ne quittent jamais votre machine.

Questions sur les data URI

Encodage, taille, couleur et limites.

Qu'est-ce qu'une data URI SVG ?+

C'est l'image entière écrite sous forme d'URL. La chaîne commence par data:image/svg+xml, et le reste est le code lui-même, échappé pour survivre dans une URL. Comme l'illustration voyage dans la référence, un navigateur qui a déjà la feuille de style a déjà l'image : pas de seconde requête, pas d'attente d'une connexion pour une icône de 600 octets.

Faut-il utiliser l'encodage URL ou le Base64 pour un SVG ?+

L'encodage URL, dans presque tous les cas. Le SVG est du texte, donc le Base64 n'apporte rien : il transforme trois octets en quatre, pour un surcoût fixe d'un tiers quel que soit le contenu. L'encodage pourcent ne coûte deux octets de plus que pour la poignée de caractères qui doivent être échappés, et finit généralement entre 10 et 25 % au-dessus de la source. Il reste aussi lisible dans un diff et se compresse mieux, car gzip et brotli voient encore les noms de balises répétés que le Base64 brouille. Gardez le Base64 pour les chaînes de traitement qui réécrivent ou échappent deux fois les signes pourcentage.

Mon SVG intégré ne s'affiche pas du tout. Que manque-t-il ?+

Presque toujours l'espace de noms. Quand vous écrivez un élément svg directement dans une page HTML, l'analyseur sait déjà de quoi il s'agit. Une data URI est chargée comme un document autonome, donc le fichier doit le déclarer lui-même avec xmlns="http://www.w3.org/2000/svg" sur l'élément racine. Sans lui, le navigateur n'analyse rien et ne dessine rien, sans le moindre message. L'autre cause fréquente est un # brut dans une couleur de remplissage : non échappé, il transforme le reste de l'URI en identifiant de fragment.

Pourquoi l'icône s'affiche-t-elle à la mauvaise taille ?+

Parce que le document encodé décide de sa propre géométrie. Sans viewBox ni width ou height, le navigateur se rabat sur un cadre de 300 sur 150. Avec width et height mais sans viewBox, la forme est figée à cette taille et refuse de se redimensionner. Avec un viewBox seul, elle se redimensionne librement, ce que l'on veut généralement pour un fond ; associez-le à background-size, ou à des width et height explicites sur la balise img.

Peut-on recolorer un SVG en data URI avec currentColor ou une variable CSS ?+

Non. Le SVG encodé est un document distinct, et rien de la page hôte n'y pénètre : currentColor est résolu par rapport à la propriété color de ce document (noir, sauf si le code la définit), et les propriétés personnalisées ne sont pas héritées à travers cette frontière. Trois façons de contourner le problème : modifier le remplissage dans le code avant l'encodage et garder une URI par couleur, piloter la forme avec mask-image pour que la couleur visible vienne de background-color, ou placer l'élément svg directement dans le HTML, où le CSS de la page peut le styler.

Le SVG peut-il encore charger une police, une image ou une feuille de style externe ?+

Non, et cette limitation est voulue, ce n'est pas un bug. Un SVG chargé via url() ou une balise img fonctionne en mode restreint : aucun script ne s'exécute et aucune ressource externe n'est récupérée, qu'il s'agisse d'une police web, d'une image matricielle liée ou d'une feuille de style. Convertissez le texte en tracés avant l'encodage, et intégrez toute image matricielle sous forme de data URI imbriquée dans le code.

Une data URI a-t-elle une longueur maximale ?+

Pas en pratique dans les navigateurs actuels : Chrome, Firefox et Safari acceptent tous des data URI dans les feuilles de style bien au-delà d'un mégaoctet. Le fameux chiffre de 32 KB est une limite d'Internet Explorer 8 qui n'a plus d'importance depuis des années. Les vraies contraintes sont ailleurs : les minificateurs et les source maps deviennent difficiles à manier, certains champs de CMS tronquent les valeurs longues, et chaque kilooctet est retéléchargé avec le fichier qui le contient. Considérez 4 KB comme confortable et 32 KB comme le seuil à partir duquel un fichier séparé est la meilleure décision technique.

Que modifie exactement l'option de nettoyage ?+

Quatre choses : les commentaires, la déclaration XML, les espaces vides entre les balises et les sauts de ligne que les logiciels d'export laissent entre les attributs. Elle ne supprime jamais un attribut, n'arrondit jamais une coordonnée, ne fusionne jamais un tracé et ne renomme jamais un id, et elle laisse intactes les données textuelles dans text, tspan, textPath, title, desc, style et script. Un document qui demande xml:space="preserve" conserve aussi tous les espaces entre ses balises, même si les commentaires et la déclaration XML sont tout de même supprimés. L'étape est donc sûre mais modeste. Pour de vraies réductions, passez d'abord le fichier dans SVGO et collez le résultat ici.

D'autres outils ciblés, prêts quand vous l'êtes.

Découvrez une collection grandissante pour les calculs, les documents, la rédaction et le travail de tous les jours.

Voir tous les outils