PicScrub logoPicScrub
Volver a los formatos

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 dimensiones
  • xmlns: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.

1

Analizar el XML

Analizar el SVG como documento XML, conservando su estructura

2

Eliminar los elementos de metadatos

Borrar los elementos <metadata>, <title> y <desc>

3

Quitar los atributos de los editores

Eliminar inkscape:*, sodipodi:* y otros espacios de nombres de editores

4

Eliminar los comentarios

Borrar del documento todos los comentarios XML

5

Limpiar los espacios de nombres

Eliminar del elemento raíz las declaraciones de espacios de nombres que no se usan

6

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.