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 dimensionixmlns: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.
Analizzare l'XML
Interpretare l'SVG come documento XML, mantenendone la struttura
Rimuovere gli elementi di metadati
Eliminare gli elementi <metadata>, <title> e <desc>
Togliere gli attributi degli editor
Rimuovere inkscape:*, sodipodi:* e gli altri namespace degli editor
Rimuovere i commenti
Eliminare tutti i commenti XML dal documento
Ripulire i namespace
Rimuovere dall'elemento radice le dichiarazioni di namespace inutilizzate
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.