Formato SVG
Scalable Vector Graphics
Estructura XML
SVG se diferencia de todos los demás formatos de este sitio en que no es binario: es texto XML y punto. Puedes abrir un SVG en un editor de texto y leerlo. Eso hace que eliminar los metadatos sea conceptualmente más sencillo, pero también significa que hay más rincones donde puede esconderse información.
Los metadatos pueden aparecer como elementos específicos, como atributos de cualquier elemento, como comentarios XML o como instrucciones de procesamiento. A los editores vectoriales les encanta meter sus propios datos en los archivos SVG.
Estructura básica de 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">
<!-- Elementos de metadatos -->
<title>Mi dibujo</title>
<desc>Creado por Juan Pérez</desc>
<metadata>
<rdf:RDF xmlns:rdf="...">
<!-- Metadatos RDF/Dublin Core -->
</rdf:RDF>
</metadata>
<!-- Contenido vectorial -->
<circle cx="50" cy="50" r="40" fill="red"/>
</svg>Elementos principales
<svg>:Elemento raíz con viewBox y dimensionesxmlns:Declaraciones de espacios de nombres<defs>:Definiciones reutilizables (degradados, patrones)<g>:Elemento de agrupación
Elementos de metadatos
La especificación de SVG define varias formas de adjuntar metadatos, y cada herramienta usa la suya. Algunas son evidentes (existe literalmente un elemento <metadata>), otras son más sutiles.
<metadata>
Contenedor de metadatos estructurados, normalmente RDF/Dublin Core. Puede incluir el nombre del creador, la fecha de creación, los derechos y mucho más.
<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>Juan Pérez</dc:creator>
<dc:date>2024-01-15</dc:date>
</rdf:Description>
</rdf:RDF>
</metadata><title>
Título legible del SVG o de elementos concretos. Suele usarse por accesibilidad, pero puede revelar para qué es el documento.
<desc>
Elemento de descripción. Puede contener información detallada sobre la imagen, su creador o su finalidad.
Comentarios XML
<!-- comentario --> puede contener notas del autor, fechas de creación, información del software o datos de depuración.
Espacios de nombres de los editores
Aquí es donde SVG se vuelve caótico. Cada editor vectorial añade sus propios atributos con espacio de nombres para guardar funciones que SVG no admite de forma nativa. Abre un archivo de Inkscape y verás atributos inkscape: y sodipodi: por todas partes. No son un riesgo de privacidad en sí mismos, pero delatan qué software has usado.
inkscape:* / sodipodi:*
Inkscape añade atributos con espacio de nombres para los nombres de las capas, la posición de las guías, la configuración del documento y el historial de edición.
<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 incrusta muchísimos metadatos: la versión, la configuración de las mesas de trabajo y, a veces, datos completos en formato AI.
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:x="http://ns.adobe.com/Extensibility/1.0/"
Sketch / Figma
Las herramientas de diseño modernas pueden incrustar nombres de capas, identificadores de componentes y ajustes de exportación en atributos personalizados.
Instrucciones de procesamiento
Las instrucciones de procesamiento XML (<?...?>) que hay al principio de los archivos SVG pueden identificar el software utilizado.
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/css" href="style.css"?> <!-- Created with Inkscape (http://www.inkscape.org/) -->
Qué se conserva y qué se elimina
- • Declaración
<?xml ...?>:Se conserva (obligatoria) - •
<?xml-stylesheet ...?>:Se conserva (es funcional) - • El resto de instrucciones de procesamiento:Se eliminan
Procesamiento basado en el DOM
Como SVG es XML válido, podemos analizarlo en forma de árbol DOM y eliminar con precisión quirúrgica lo que no queremos. Es mucho más exacto que los enfoques basados en expresiones regulares y no rompe por accidente contenido válido.
Analizar el XML
Analizar el SVG como documento XML, conservando su estructura
Eliminar los elementos de metadatos
Borrar los elementos <metadata>, <title> y <desc>
Quitar los atributos de los editores
Eliminar inkscape:*, sodipodi:* y otros espacios de nombres de editores
Eliminar los comentarios
Borrar del documento todos los comentarios XML
Limpiar los espacios de nombres
Eliminar del elemento raíz las declaraciones de espacios de nombres que no se usan
Serializar
Escribir el XML limpio de nuevo como archivo SVG
Resumen del procesamiento
Se conserva
- • Todos los gráficos vectoriales (trazados, formas, texto)
- • Estilos y CSS
- • Degradados y patrones
- • Filtros y efectos
- • Imágenes incrustadas (referenciadas)
- • viewBox y dimensiones
- • Espacios de nombres estándar de SVG
Se elimina
- • El elemento <metadata>
- • El elemento <title>
- • El elemento <desc>
- • Los comentarios XML
- • Los atributos inkscape:*
- • Los atributos sodipodi:*
- • Los espacios de nombres de Adobe y Sketch
- • Las declaraciones de espacios de nombres sin usar
Imágenes incrustadas
Hay una trampa que pilla a mucha gente desprevenida: los archivos SVG pueden incrustar imágenes de mapa de bits como URI de datos en base64. Y esos JPEG o PNG incrustados pueden llevar dentro sus propios metadatos EXIF.
Limitación actual
Ahora mismo PicScrub elimina los metadatos del propio SVG, pero no descodifica ni procesa las imágenes de mapa de bits incrustadas:
<image href="data:image/jpeg;base64,/9j/4AAQ..." />
Por el momento, PicScrub no procesa las imágenes de mapa de bits incrustadas en archivos SVG. Para una privacidad completa, extráelas y procésalas por separado.