7

В первый раз мне нужно было выполнить diff для файла SVG, созданного с помощью Inkscape, потому что у меня был конфликт в SVN.

Проверяя различия, я заметил, что файл SVG содержит много личной информации. Личная информация о путях, используемых для экспорта. Исходный код SVG выглядит так:

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

В моем случае в нем много имен папок, относящихся к проектам, над которыми я работал в 2009 году.

Как я могу удалить эту личную информацию из файлов Inkscape SVG?

Конечно, я мог бы сделать это вручную в текстовом редакторе, но у этого есть некоторые недостатки:

  • это подвержено ошибкам. Вы должны быть совершенно уверены, что вы делаете. Должен быть более безопасный способ сделать это.
  • это отнимает много времени. Должен быть более быстрый способ сделать это.
  • это может быть неполным. Может быть, есть другие личные данные, которые я еще не обнаружил.

2 ответа2

8

Самый простой способ сделать это - сохранить файл в виде оптимизированного файла Optimized SVG . Этот параметр доступен в раскрывающемся диалоговом окне « Save As... ». При нажатии кнопки «Сохранить» появится диалоговое окно с вопросом, что удалить. Убедитесь, что флажок « Keep Editor Data не установлен .

3

У меня много SVG из разных источников, поэтому я искал автоматизированное решение.

1. SVGO (NodeJS, javascript)

Есть очень хороший пакет NPM: SVGO

Так как я использую gulp в качестве исполнителя задач, поэтому gulp-svgmin (или gulp-svgo) очень полезен

2. XSLT (преобразование SVG)

Другой автоматизированный подход - использовать XSLT. Вот XSL-преобразование, которое я использовал для очистки SVG.

Этот XSLT делает следующее:

  1. удаляет все атрибуты inkscape и sodipodi
  2. удаляет все элементы inkscape и sodipodi
  3. удаляет элемент metadata со всеми предками
  4. удаляет атрибуты style (мы используем CSS) - только когда для переменной preserve-style установлено значение false

В качестве вывода вы получите чистый SVG-файл.

Как запустить трансформацию

Javascript (gulp build)

Если вы используете gulp в качестве системы сборки, вы можете использовать следующие плагины:

Python и lxml.etree

Используйте этот короткий скрипт на python:

#!/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')

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .