PicScrub logoPicScrub
Torna ai formati

Formato SVG

Scalable Vector Graphics

Una struttura XML

SVG è diverso da tutti gli altri formati di questo sito, perché non è binario: è semplice testo XML. Puoi aprire un SVG in un editor di testo e leggerlo. Questo rende la rimozione dei metadati più semplice sulla carta, ma vuol dire anche che i posti in cui nascondere informazioni sono di più.

I metadati possono comparire come elementi dedicati, come attributi di qualsiasi elemento, come commenti XML o come istruzioni di elaborazione. E gli editor vettoriali adorano infilare i propri dati nei file SVG.

Struttura di base di un SVG

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     width="100" height="100" viewBox="0 0 100 100">

  <!-- Elementi di metadati -->
  <title>Il mio disegno</title>
  <desc>Creato da Mario Rossi</desc>
  <metadata>
    <rdf:RDF xmlns:rdf="...">
      <!-- Metadati RDF/Dublin Core -->
    </rdf:RDF>
  </metadata>

  <!-- Contenuto vettoriale -->
  <circle cx="50" cy="50" r="40" fill="red"/>
</svg>

Gli elementi chiave

  • <svg>:elemento radice, con viewBox e dimensioni
  • xmlns:dichiarazioni dei namespace
  • <defs>:definizioni riutilizzabili (sfumature, motivi)
  • <g>:elemento di raggruppamento

Gli elementi di metadati

Le specifiche SVG prevedono diversi modi per allegare metadati, e ogni strumento sceglie il suo. Alcuni sono evidenti (esiste letteralmente un elemento <metadata>), altri sono più sottili.

<metadata>

Contenitore di metadati strutturati, di solito RDF/Dublin Core. Può contenere il nome di chi ha creato il file, la data di creazione, i diritti e altro ancora.

<metadata>
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
           xmlns:dc="http://purl.org/dc/elements/1.1/">
    <rdf:Description>
      <dc:creator>Mario Rossi</dc:creator>
      <dc:date>2024-01-15</dc:date>
    </rdf:Description>
  </rdf:RDF>
</metadata>

<title>

Titolo leggibile dell'SVG o dei singoli elementi. Spesso si usa per l'accessibilità, ma può rivelare a che cosa serve il documento.

<desc>

Elemento di descrizione. Può contenere informazioni dettagliate sull'immagine, su chi l'ha creata o sul suo scopo.

Commenti XML

<!-- commento --> può contenere note dell'autore, date di creazione, dati sul software o informazioni di debug.

I namespace degli editor

Qui l'SVG si fa disordinato. Ogni editor vettoriale aggiunge i propri attributi con namespace per salvare funzioni che l'SVG non supporta di suo. Apri un file di Inkscape e vedrai attributi inkscape: e sodipodi: ovunque. Non sono rischi per la privacy in senso stretto, ma svelano che software hai usato.

inkscape:* / sodipodi:*

Inkscape aggiunge attributi con namespace per i nomi dei livelli, la posizione delle guide, le impostazioni del documento e la cronologia delle modifiche.

<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
     xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
     inkscape:version="1.2"
     sodipodi:docname="my-drawing.svg">
  <sodipodi:namedview inkscape:current-layer="layer1"/>
</svg>

Adobe Illustrator

Illustrator incorpora metadati in abbondanza: versione, impostazioni delle tavole da disegno e a volte dati completi in formato AI.

xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
xmlns:x="http://ns.adobe.com/Extensibility/1.0/"

Sketch / Figma

Gli strumenti di design moderni possono incorporare nomi dei livelli, ID dei componenti e impostazioni di esportazione in attributi personalizzati.

Le istruzioni di elaborazione

Le istruzioni di elaborazione XML (<?...?>) all'inizio dei file SVG possono rivelare il software usato.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="style.css"?>
<!-- Creato con Inkscape (http://www.inkscape.org/) -->

Che cosa resta e che cosa viene rimosso

  • • dichiarazione <?xml ...?>:mantenuta (obbligatoria)
  • • <?xml-stylesheet ...?>:mantenuta (funzionale)
  • • altre istruzioni di elaborazione:rimosse

Un'elaborazione basata sul DOM

Siccome l'SVG è XML valido, possiamo trasformarlo in un albero DOM e rimuovere con precisione chirurgica quello che non vogliamo. È più preciso degli approcci basati sulle espressioni regolari e non rischia di rompere per sbaglio contenuti validi.

1

Analizzare l'XML

Interpretare l'SVG come documento XML, mantenendone la struttura

2

Rimuovere gli elementi di metadati

Eliminare gli elementi <metadata>, <title> e <desc>

3

Togliere gli attributi degli editor

Rimuovere inkscape:*, sodipodi:* e gli altri namespace degli editor

4

Rimuovere i commenti

Eliminare tutti i commenti XML dal documento

5

Ripulire i namespace

Rimuovere dall'elemento radice le dichiarazioni di namespace inutilizzate

6

Serializzare

Riscrivere l'XML ripulito come file SVG

Riepilogo dell'elaborazione

Mantenuti

  • • Tutta la grafica vettoriale (tracciati, forme, testo)
  • • Stili e CSS
  • • Sfumature e motivi
  • • Filtri ed effetti
  • • Immagini incorporate (per riferimento)
  • • viewBox e dimensioni
  • • Namespace SVG standard

Rimossi

  • • Elemento <metadata>
  • • Elemento <title>
  • • Elemento <desc>
  • • Commenti XML
  • • Attributi inkscape:*
  • • Attributi sodipodi:*
  • • Namespace di Adobe e Sketch
  • • Dichiarazioni di namespace inutilizzate

Le immagini incorporate

C'è una trappola che coglie tutti di sorpresa: i file SVG possono incorporare immagini raster come data URI in base64. E quei JPEG o PNG incorporati possono avere dentro i loro metadati EXIF.

Un limite attuale

Al momento PicScrub rimuove i metadati a livello di SVG, ma non decodifica né elabora le immagini raster incorporate:

<image href="data:image/jpeg;base64,/9j/4AAQ..." />

PicScrub al momento non elabora le immagini raster incorporate nei file SVG. Per una privacy completa, estraile ed elaborale a parte.