Persönliche Daten aus der SVG-Datei entfernen

7

Zum ersten Mal musste ich einen Diff für eine mit Inkscape erstellte SVG-Datei durchführen, da ich einen Konflikt in SVN hatte.

Bei der Überprüfung der Unterschiede habe ich festgestellt, dass die SVG-Datei viele persönliche Informationen enthält. Bei den persönlichen Informationen handelt es sich um Pfade, die für den Export verwendet werden. Die SVG-Quelle sieht folgendermaßen aus:

<text ... inkscape:export-filename="<personal information here>" ... />

In meinem Fall gibt es viele Ordnernamen, die auf Projekte zurückgehen, für die ich 2009 gearbeitet habe.

Wie kann ich diese persönlichen Informationen aus Inkscape SVG-Dateien entfernen?

Natürlich könnte ich es in einem Texteditor manuell machen, aber das hat einige Nachteile:

  • Es ist fehleranfällig. Sie müssen ziemlich sicher sein, was Sie tun. Es sollte einen sichereren Weg geben, dies zu tun.
  • es ist zeitaufwändig. Es sollte einen schnelleren Weg geben, dies zu tun.
  • es könnte unvollständig sein. Vielleicht gibt es andere persönliche Daten, die ich noch nicht entdeckt habe.
Thomas Weller
quelle

Antworten:

8

Der einfachste Weg, dies zu tun, besteht darin, die Datei als Optimized SVGDatei zu speichern. Diese Option ist in der Save As...Dropdown-Liste des Dialogfelds verfügbar. Wenn Sie auf Speichern klicken, wird ein Dialogfeld angezeigt, in dem Sie gefragt werden, was entfernt werden soll. Stellen Sie sicher , dass die Box Keep Editor Datableibt unkontrolliert .

Krowe
quelle
Ich muss das verpasst haben, weil es weit unten in den Optionen ist. Ich habe es versucht und es funktioniert.
Thomas Weller
2

Ich habe viele SVGs aus verschiedenen Quellen, daher suchte ich nach einer automatisierten Lösung .

1. SVGO (NodeJS, Javascript)

Es gibt ein sehr gutes NPM-Paket: SVGO

Da ich gulpals Task-Runner verwende, ist das gulp-svgmin (oder gulp-svgo ) sehr hilfreich

2. XSLT (SVG transformieren)

Der andere automatisierte Ansatz - verwenden Sie XSLT. Hier ist eine XSL-Transformation, mit der ich SVG bereinigt habe.

Dieses XSLT führt Folgendes aus:

  1. entfernt alle inkscapeund sodipodiAttribute
  2. entfernt alle inkscapeund sodipodiElemente
  3. Entfernt das metadataElement mit allen Vorfahren
  4. Entfernt styleAttribute (wir verwenden CSS) - nur wenn die Variable auf preserve-stylegesetzt istfalse

Als Ausgabe erhalten Sie die saubere SVG-Datei.

So führen Sie eine Transformation durch

Javascript (Schluckaufbau)

Wenn Sie gulp als Build-System verwenden, können Sie folgende Plugins verwenden:

Python und lxml.etree

Verwenden Sie dieses kurze Python-Skript:

#!/usr/bin/python

import lxml.etree as ET

def clean_file(path, pathto):
    svg1 = ET.parse(path)

    xslt = ET.parse('cleanup-svg.xsl')
    transform = ET.XSLT(xslt)
    svg2 = transform(svg1)
    with open(pathto, 'w') as f:
        f.write(ET.tostring(svg2, pretty_print=True))

clean_file('a.svg', 'b.svg')
maxkoryukov
quelle