J'ai une image que j'utilise sur un site web. J'aimerais utiliser un fichier SVG pour qu'il puisse être de n'importe quelle taille et avoir toujours l'air net.
- Cette liste déroulante contient le fichier SVG ainsi que le fichier Illustrator d'origine.
Ceci est une exportation JPEG:
Le fichier SVG a une taille de fichier beaucoup plus grande que le fichier JPG. Est-il possible d'optimiser le fichier SVG pour qu'il ait une taille de fichier similaire? Je pourrais peut-être perdre une partie de la qualité si cela pouvait aider. J'ai essayé cet optimiseur SVG , mais cela ne faisait pas beaucoup de différence.
Si j'enregistre le fichier illustrator au format JPG, trace le résultat et l'enregistre au format SVG, la taille du fichier est beaucoup plus petite, mais la qualité perd légèrement. Cela me fait penser que peut-être les calques de l'original sont à l'origine de la grande taille? L'image sur laquelle je travaille est-elle trop complexe pour être adaptée au format SVG?
Réponses:
Votre fichier SVG contient un graphique en pixels intégré pour la teinte en bas à droite du contrôleur. Ceci est responsable d'environ de la taille du fichier. Si vous le supprimez, votre fichier SVG est identique à votre JPEG. Vous pouvez probablement obtenir un effet suffisamment similaire avec un dégradé.
Parmi les autres techniques permettant de réduire la taille du fichier SVG, citons:
Sauf si vous utilisez un nombre absurde de calques (pensez à un calque pour chaque objet), les calques ne doivent pas contribuer de manière significative à la taille du fichier. Même dans ce cas, il ne s'agirait que d'une fraction.
Si vous pouvez raisonnablement créer une image à partir de rien¹, cela ne devrait pas être trop complexe pour le format SVG. Il n’existe pas de seuil de complexité magique au-delà duquel la taille des fichiers explose (cela est probablement vrai pour tout format vaguement raisonnable). Bien entendu, si vous ne choisissez que la résolution suffisamment grossière, vous pouvez exporter chaque fichier SVG au format JPEG dont la taille de fichier est inférieure. Mais cela ne signifie pas nécessairement que vous ne devez pas utiliser de SVG.
¹ C'est notamment sans traçage et similaire. Pour donner un exemple extrême: si vous voulez reproduire exactement chaque pixel d’une photo avec des primitives SVG (c’est-à-dire sans incorporer de graphismes pixel dans SVG), vous pouvez considérer le résultat comme trop complexe pour être efficacement représenté au format SVG. . Mais c'est du bon sens, espérons-le.
la source
Comme Wrzlprmft l'a déjà indiqué, plus de 50% de la taille de votre fichier SVG est occupée par une image bitmap PNG intégrée utilisée pour créer un effet d'ombrage assez subtil sur le contrôleur. Il suffit de supprimer cette image et de la remplacer par un simple dégradé radial pour réduire le format SVG à environ 10 Ko.
Image originale avec une nuance de bitmap fantaisie à gauche, version modifiée avec un simple dégradé radial à droite.
Pendant que vous y êtes, vous devriez également vérifier vos chemins pour voir s’il ya quelque chose à simplifier. Je n'ai pas trouvé grand chose, mais le contour de votre contrôleur a quelques nœuds adjacents (près du haut et du bas au milieu) qui peuvent être fusionnés sans faire de différence visible.
C'est une économie facile de 50%, mais ne nous arrêtons pas pour l'instant. Si vous connaissez même un peu le format SVG , vous pouvez faire beaucoup mieux que cela.
Tout d’abord, lancez "Vacuum Defs" dans Inkscape pour éliminer les définitions inutiles, puis enregistrez l’image au format "SVG". Maintenant, il est temps de l'ouvrir dans un éditeur de texte et de voir ce dont on peut se débarrasser. Idéalement, vous devriez utiliser un éditeur avec une prévisualisation SVG intégrée, afin de pouvoir rapidement voir quel effet (espérons-le, aucun) vos modifications ont sur l'apparence de l'image. J'utilise emacs pour cela, mais il existe d' autres éditeurs avec des fonctionnalités similaires .
Quoi qu'il en soit, avec le fichier SVG ouvert dans votre éditeur de texte, commençons par le simplifier!
Tout en haut, il y a un gros inutile
<!-- comment -->
. Supprimez-le simplement.Si vous modifiez un fichier SVG directement à partir d'Illustrator, il existe également une
<!DOCTYPE ... >
ligne inutile . Supprimez-le aussi.Inkscape insiste pour coller un bloc de métadonnées RDF inutile dans votre image. Il suffit de localiser la
<metadata ...>
balise et de la supprimer, ainsi que tout le reste, y compris la fermeture</metadata>
.De plus, même si vous enregistrez le fichier en tant que "SVG ordinaire", Inkscape le lit toujours avec une série d'attributs personnalisés. Recherchez tous les attributs commençant par
inkscape:
ousodipodi:
et supprimez-les.Avec les métadonnées et les attributs spécifiques à Inkscape supprimés, vous pouvez supprimer tous les attributs d'espace de nom XML inutilisés de la
<svg>
balise. Il doit être sûr d'éliminer au moinsxmlns:rdf
,xmlns:dc
,xmlns:cc
,xmlns:inkscape
etxmlns:sodipodi
. S'il existe unxmlns:svg
attribut redondant , supprimez-le également. Les seuls attributs d'espace de noms que vous devriez avoir laissés à ce stade sont les suivants:La
<svg>
balise contient également d’autres attributs inutiles que vous pouvez supprimer en toute sécurité, tels queenable-background
etxml:space="preserve"
. (Ceux -ci sont insérés par l'exportateur SVG Illustrator et Inkscape est pas assez intelligent pour se rendre compte qu'ils ne servent à rien.) L'viewBox
attribut peut également être retiré en toute sécurité de cette image, car il répète simplement les valeurs desx
,y
,width
etheight
attributs.Vous pouvez également supprimer en toute sécurité les attributs
encoding
etstandalone
de la<?xml ... ?>
balise.Passons maintenant à l'intestin des données d'image. Pour une raison quelconque, Inkscape insiste sur l'attribution d'
id
attributs à chaque élément, même s'ils ne sont jamais référencés. Toutid
attribut dont la valeur n'est jamais répétée ailleurs dans le fichier (recherchez-le!) Peut être supprimé en toute sécurité. Fondamentalement, les seuls identifiants que vous devez conserver sont ceux des gradients et éventuellement de tout autre objet (par exemple, des chemins) trouvé dans les<defs>
sections.En outre, Inkscape aime générer de longs identifiants comme
linearGradient4277
. Pensez à abréger les identifiants que vous ne pouvez pas simplement supprimer en quelque chose de court, comme à lalg1
place.Il y a aussi plusieurs
<defs>
sections les unes après les autres. Leur fusion enregistre quelques octets (et simplifie la structure du document en général).Il existe également plusieurs groupes vides (
<g>
éléments) à la fin du fichier. Il suffit de s'en débarrasser. Il peut également y avoir plusieurs groupes consécutifs avec exactement le mêmetransform
attribut (ou aucun). il est également prudent de les fusionner.Pour des raisons étranges, Inkscape enregistre un chemin (
d
attribut) de Bezier redondant pour les<circle>
éléments. Cela prend de la place sans aucune raison, alors supprimez-les. (Laissez lesd
attributs sur les<path>
éléments être; ceux-ci sont réellement utilisés pour quelque chose.)Inkscape aime également utiliser CSS dans les
style
attributs où des attributs plus spécifiques seraient plus courts, par exemple la réécriturefill="#4888fa"
pour les plus détaillésstyle="fill:#4888fa"
. Vous pouvez économiser quelques octets en décomposant ces styles en attributs individuels (et en supprimant ceux qui ne font que répéter inutilement le réglage par défaut), mais cela nécessite un peu plus de familiarité avec le format SVG que la plupart des modifications ci-dessus.De plus, s'il y a des
<use ... >
éléments, vous pourrez peut-être sauvegarder quelques octets en les remplaçant par l'élément auquel ils sont liés. (Bien entendu, cela ne permet d'économiser de l'espace que si les éléments liés ne sont utilisés qu'une seule fois.) Il semble également qu'Inkscape aime définir les dégradés circulaires de manière indirecte, en définissant d'abord les arrêts dans un<linearGradient>
, puis en les référençant dans un<radialGradient>
; vous pouvez simplifier cela en déplaçant les arrêts directement à l'intérieur du dégradé radial et en vous débarrassant du dégradé linéaire désormais inutilisé. En prime, si vous réussissez à vous débarrasser de tous lesxlink:href
attributs, vous pouvez supprimer cetxmlns:xlink
attribut de la<svg>
balise.Si vous voulez vraiment extraire chaque dernier octet supplémentaire, recherchez des valeurs numériques avec trop de décimales et arrondissez-les à une valeur plus raisonnable. C'est ici que l'aperçu en direct est vraiment utile, car il vous permet de voir combien vous pouvez arrondir la valeur avant qu'elle ne soit visible. Même si vous ne voulez pas tester soigneusement chaque nombre pour voir dans quelle mesure il peut être arrondi, vous pouvez au moins choisir des résultats faciles, comme arrondir une valeur de
1.0000859
pixels à juste1
.Enfin, nettoyez l’indentation et les espaces dans le fichier. Pour minimiser absolument le nombre d'octets, vous devez tout mettre sur une ligne (ou du moins, ne mettre que les sauts de ligne devant les attributs, où les espaces sont de toute façon obligatoires), mais c'est vraiment difficile à lire. Néanmoins, il est possible de trouver un bon équilibre entre lisibilité et compacité avec une indentation simple et conservatrice.
Quoi qu'il en soit, voici ce que j'ai réussi à éditer à la main votre image SVG dans:
Cette image SVG ne ressemble pratiquement pas au deuxième exemple d’image ci-dessus et ne prend que 5 189 octets, soit beaucoup moins que votre image JPEG. Je suis sûr que cela pourrait encore être optimisé, mais ce n’est vraiment qu’un exemple de ce que vous pouvez faire en quelques minutes avec la pratique. (Il m'a fallu beaucoup plus de temps pour écrire cette réponse que pour éditer le code SVG.)
Enfin, compresser ce code SVG avec gzip le réduit à seulement 1846 octets (!), Soit à peine plus du quart de la taille de votre version JPEG.
la source
Je suis un peu surpris que personne n'ait mentionné l' extension " Scour ". Il est fourni avec Inkscape (à partir de la version 0.47) et effectue bon nombre des optimisations mentionnées par Ilmari Karonen.
la source
Vous pouvez le convertir en SVG compressé (SVGZ) et placer le fichier image.svgz sur votre page Web:
Ou bien, dans Adobe Illustrator, enregistrez simplement sous "SVG compressé" pour écrire un fichier image.svgz.
Pour votre image de test, il est toujours plus grand que le JPG, cependant:
la source
J'ai récemment trouvé un outil à l' adresse https://petercollingridge.appspot.com/svg-editor ( code source ) qui permet d'optimiser les fichiers SVG. Dans ce cas, les résultats sont bons: la taille du fichier est ramenée à 3,7 Ko, soit un peu plus de la moitié de la taille du fichier JPG, avec un petit réglage manuel:
Utiliser cet outil pour optimiser les fichiers SVG nécessite beaucoup moins de temps que de jouer au golf manuellement.
la source
SVGOMG! est une application Web géniale pour l'optimisation SVG
Selon le créateur de l'application, SVGOMG est SVGO « de M Issing G UI ».
Le faire fonctionner sur l'image fournie le réduit à juste
3.42kb
, et juste1.4kb
après avoir été compressé.la source
<radialGradient>
et, à<path>
partir de mon code optimisé manuellement, SVGOMG optimise l'image résultante de 5,8 ko jusqu'à 4,02 kB (4,11 ko raffiné), et semble faire un travail assez minutieux; Je ne vois pas vraiment d'occasions manquées évidentes. (En y jouant un peu plus, j'ai remarqué qu'il lui arrivait parfois de ne pas fusionner des groupes consécutifs avec des attributs identiques. Inkscape semble parfois générer ceux-ci, par exemple en ajustant la page pour l'adapter au dessin.)