internettoolbox
← Torna agli strumenti

Semplificatore di path SVG

Impostazioni di semplificazione dei path

Come funziona

Incolla un SVG o trascina il file sulla zona di caricamento: la pagina riscrive i dati dei path con SVGO v4 e ti mostra esattamente quanto hai guadagnato. Vedi i byte prima e dopo, la percentuale risparmiata, la dimensione con gzip e l'anteprima dell'originale accanto al risultato, così controlli che la forma non si sia spostata.

La leva è la precisione. I programmi di grafica esportano le coordinate con sei decimali (`M 12.847362 4.019283`), circa mille volte più fini di quanto uno schermo possa mostrare. Il cursore va da 0 a 6 e qui parte da 2, un passo sotto l'ottimizzatore SVG generale, perché questa pagina è pensata per i dati dei path e due decimali bastano da soli a dimezzare quasi tutti gli attributi `d=`. Il cursore regola due plugin di SVGO insieme: `convertPathData` per i comandi dei path e `cleanupNumericValues` per tutti gli altri numeri del documento, così niente resta con sei decimali accanto a un path che ne ha due.

Come scegliere il valore: 3 non si vede a nessuno zoom, 2 è giusto per icone e loghi mostrati sotto qualche centinaio di pixel, 1 va bene per piccole icone monocromatiche e inizia a spostare le curve su tutto ciò che è più grande, 0 è sicuro solo per rettangoli e forme allineate agli assi. L'anteprima si aggiorna a ogni modifica, quindi il metodo onesto è abbassare il cursore finché vedi una differenza e poi tornare indietro di un passo.

Cosa fa `convertPathData` oltre ad arrotondare. Riscrive ogni path nella forma equivalente più corta: i comandi assoluti diventano relativi dove è più breve (`M 100 100 L 120 100` diventa `M100 100h20`), i segmenti dritti passano da `L` a `H` o `V`, i sottopercorsi di lunghezza zero e ridondanti spariscono, e le curve vengono riscritte nella forma abbreviata che occupa meno caratteri. Con una precisione ragionevole è tutto senza perdita: il browser disegna gli stessi pixel con meno byte.

`mergePaths` prende i `<path>` consecutivi con gli stessi attributi di stile e li unisce in un solo elemento con un solo `d=`. Su un'icona esportata come una dozzina di forme separate vale spesso dal 5 al 20% del file, quasi tutto in tag e attributi `fill=` ripetuti che spariscono. Gira in automatico, ed è il motivo per tenere l'originale se in futuro vuoi animare i singoli path: una volta uniti, niente può più puntarli separatamente.

Segmenti e attributi inutili fanno la stessa fine. `removeUselessStrokeAndFill` toglie gli attributi `stroke` e `fill` che ripetono il valore predefinito, `convertShapeToPath` trasforma `<rect>`, `<polygon>` e simili in path così `mergePaths` può raggiungerli, `removeUselessDefs` elimina le voci di `<defs>` che nessuno usa, e `collapseGroups` scioglie i `<g>` che non aggiungono niente.

Cosa non fa, ed è la parte che quasi tutte le pagine sbagliano: non toglie punti di ancoraggio. Un path che entra con 4.000 punti esce con 4.000 punti. Tutto quello descritto sopra fa costare meno byte a ogni punto, ma niente ridisegna la curva. Se ti servono davvero meno nodi, perché il path viene da una vettorializzazione ed è pesante da animare o modificare a mano, quella è una ricostruzione della curva (Ramer-Douglas-Peucker e simili) e per definizione cambia la forma. Lo fanno il menu Tracciato di Inkscape, la funzione Semplifica di Illustrator e la libreria simplify-js. Fallo prima, poi porta qui il risultato per il passaggio senza perdita: i due passaggi si sommano.

Le altre impostazioni. Mantieni viewBox è attiva e conviene lasciarla così, a meno che l'SVG non abbia una dimensione fissa che non cambi mai, perché toglierla rompe il ridimensionamento con il CSS per risparmiare circa 25 byte. Mantieni gli attributi id è disattiva, e va bene così a meno che il file non sia uno sprite o che CSS e JavaScript selezionino i nodi per id. Mantieni <title> / <desc> è disattiva; attivala quando la grafica ha un significato, perché gli screen reader leggono il `<title>`. Multipass è attiva e ripete la pipeline finché il risultato smette di ridursi, trovando un altro 3–8% sui path complessi. Formatta il risultato indenta il codice invece di scriverlo su una riga.

Guarda il numero con gzip, non quello grezzo. Ogni server web comprime gli SVG prima di inviarli, e gzip comprimeva già gran parte delle ripetizioni che SVGO elimina. Un 60% in meno sui byte grezzi diventa spesso un 25–40% dopo gzip, ed è la cifra con gzip che si traduce in tempo di caricamento.

Il motore è SVGO, la stessa libreria usata dalla CLI, da webpack, da Vite e da svgr, che qui gira nel browser invece che in Node. Con le stesse impostazioni il risultato è identico byte per byte a quello di `npx svgo` in locale. Non viene caricato niente e non c'è una coda, come conferma la scheda Rete. Per una pulizia generale, con lo stesso motore, precisione predefinita 3 e la rimozione dei metadati degli editor in primo piano, usa l'ottimizzatore SVG di questo sito.

Domande frequenti

Come si semplifica un path SVG?

Abbassando il cursore della precisione numerica. È di gran lunga la leva più forte sui dati dei path, perché i programmi di grafica esportano sei decimali e due bastano per tutto ciò che è mostrato sotto qualche centinaio di pixel. Scendere da 6 a 2 dimezza di solito da solo l'attributo d=. Guarda l'anteprima affiancata mentre sposti il cursore e lascia attivo Multipass, così la pipeline si ripete finché il risultato smette di ridursi.

Riduce il numero di punti di un path?

No. Un path che entra con 4.000 punti di ancoraggio esce con 4.000 punti. Cambia quanto costa ogni punto in byte: le coordinate vengono arrotondate, i comandi assoluti diventano relativi, i segmenti dritti passano da L a H e V, e i path con lo stesso stile vengono uniti. Per avere davvero meno nodi serve una ricostruzione della curva, che cambia la forma: usa prima il menu Tracciato di Inkscape, la funzione Semplifica di Illustrator o simplify-js, poi porta qui il risultato.

Che precisione devo usare?

2 per icone e loghi, ed è il valore predefinito di questa pagina. Usa 3 quando la grafica è grande o dettagliata e vuoi la certezza che niente si sposti, 1 solo per piccole icone monocromatiche e 0 solo per rettangoli e forme allineate agli assi. Una grafica su tela grande, come una mappa o un'illustrazione dettagliata, può richiedere 4. Decide l'anteprima: scendi finché vedi un cambiamento, poi torna indietro di un passo.

Cosa cambia davvero convertPathData?

Quattro cose. Arrotonda ogni coordinata alla precisione scelta, trasforma i comandi assoluti in relativi quando è più corto, riduce i segmenti L dritti a H e V ed elimina i segmenti di lunghezza zero e i sottopercorsi ridondanti. Con una precisione ragionevole sono tutte senza perdita: i pixel disegnati sono identici e l'attributo d= è più corto del 20–60%.

Unire i path rompe le animazioni del mio SVG?

Può succedere, ed è l'unica cosa a cui fare attenzione. mergePaths unisce i path consecutivi con lo stesso stile in un solo elemento, quindi un selettore CSS o JavaScript che puntava a uno di loro non trova più niente. Se animi o manipoli i singoli path, tieni l'originale non unito sotto controllo di versione e tratta il file ottimizzato come risultato della build.

È come usare SVGO da riga di comando?

Sì. È SVGO v4, la libreria a cui si appoggiano la CLI, webpack, Vite e svgr, eseguita nel browser invece che in Node. Con le stesse impostazioni il risultato è identico byte per byte a npx svgo input.svg. Il cursore della precisione corrisponde all'opzione floatPrecision di convertPathData e cleanupNumericValues, cioè quello che imposteresti in un svgo.config.js.

Perché il risparmio con gzip è più basso di quello grezzo?

Perché gzip comprimeva già le ripetizioni che SVGO toglie. Un path pieno di numeri a sei decimali ha molta ridondanza che gzip sfrutta, quindi togliere quelle cifre recupera meno di quanto dicano i byte grezzi. Un 60% in meno sui byte grezzi diventa di solito un 25–40% con gzip, ed è la cifra con gzip quella che arriva ai tuoi utenti, perché ogni server web comprime gli SVG.

Posso recuperare il path originale dopo?

No. Arrotondare le coordinate e unire i path sono operazioni distruttive: i decimali scartati e i confini tra gli elementi sono persi. Tieni l'originale sotto controllo di versione, o usa il semplificatore come passaggio di build su una copia. Per questo l'anteprima è importante: è l'unico controllo che hai prima che i byte spariscano.

Il mio SVG viene caricato da qualche parte?

No. SVGO gira come JavaScript nella scheda del browser, quindi il file non lascia mai il tuo dispositivo. Apri gli strumenti per sviluppatori, guarda la scheda Rete e premi Ottimizza: non parte nessuna richiesta. Conta per loghi e grafiche di clienti coperte da NDA, che sono quasi tutto quello che finisce in uno strumento come questo.

Plugin di SVGO per i path e come li regola questa pagina

I plugin che toccano i dati dei path, cosa cambia ognuno e quale controllo di questa pagina lo regola.

PluginCosa fa ai dati dei pathRegolato daRisparmio tipico
convertPathDataArrotonda le coordinate, trasforma i comandi assoluti in relativi, riduce L a H e V, toglie i sottopercorsi di lunghezza zero e ridondantiCursore della precisione numerica20–60%
cleanupNumericValuesArrotonda alla stessa precisione tutti gli altri numeri del file (width, x, y, stroke-width)Cursore della precisione numerica5–30%
mergePathsUnisce i path consecutivi con lo stesso stile in un solo attributo d=Sempre attivo, da preset-default5–20%
convertShapeToPathRiscrive rect, polygon, line e polyline come path così mergePaths può raggiungerliSempre attivo, da preset-defaultFino a 30 byte per forma
convertEllipseToCircleRiscrive come cerchio un'ellisse con raggi ugualiSempre attivo, da preset-defaultPochi byte per forma
convertTransformUnisce e arrotonda le trasformazioni, riscrivendo matrix() come translate, scale o rotate quando sono equivalenti e più cortiSempre attivo, da preset-default1–10%
removeUselessStrokeAndFillToglie gli attributi stroke e fill che ripetono il valore predefinitoSempre attivo, da preset-default1–5%
collapseGroupsScioglie i gruppi g che non aggiungono niente, spostando i loro attributi sui pathSempre attivo, da preset-default1–8%
cleanupIdsToglie o accorcia gli attributi id che nessuno usaOpzione Mantieni gli attributi id5–15%

Comportamento verificato su SVGO v4, la versione usata da questa pagina. Il cursore della precisione viene passato a convertPathData e cleanupNumericValues come floatPrecision. I plugin sempre attivi arrivano da preset-default e qui non si possono disattivare; removeViewBox, removeTitle e removeDesc non fanno parte di preset-default nella v4 e vengono aggiunti come plugin separati solo quando togli la spunta alle relative opzioni. I risparmi sono intervalli tipici misurati su icone esportate da Illustrator, Figma e Sketch.

Cambia strumento

Cerca e apri qualsiasi strumento