1.SVGO(NodeJS,javascript)

1.SVGO(NodeJS,javascript)

我第一次需要表演差异在使用 Inkscape 创建的 SVG 文件上,因为我在 SVN 中遇到冲突。

在检查差异时,我注意到 SVG 文件包含大量个人信息。个人信息与用于导出的路径有关。SVG 源代码如下所示:

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

对我来说,它有很多文件夹名称可以追溯到我 2009 年从事的项目。

如何从 Inkscape SVG 文件中删除这些个人信息?

当然,我可以在文本编辑器中手动完成此操作,但这样做有一些缺点:

  • 它很容易出错。你需要非常清楚自己在做什么。应该有更安全的方法来实现它。
  • 这很耗时。应该有更快捷的方法。
  • 它可能不完整。也许还有其他我尚未发现的个人数据。

答案1

最简单的方法是将文件另存为文件Optimized SVG。此选项在对话框下拉菜单中可用Save As...。单击“保存”时,将弹出一个对话框,询问您要删除的内容。确保框Keep Editor Data留在未选中

答案2

我有很多来自不同来源的 SVG,所以我在寻找自动化解决方案

1.SVGO(NodeJS,javascript)

有一个非常好的NPM包:超音速巡航机

由于我使用gulp作为任务运行器,因此gulp-svgmin(或者gulp-svgo)非常有帮助

2. XSLT(转换 SVG)

另一种自动化方法——使用 XSLT。以下是一个 XSL 转换我曾经用来清理 SVG。

此 XSLT 执行以下操作:

  1. 删除所有inkscapesodipodi属性
  2. 删除所有inkscapesodipodi元素
  3. 删除metadata所有祖先元素
  4. 删除style属性(我们使用 CSS)- 仅当变量preserve-style设置为false

作为输出,您将获得干净的 SVG 文件。

如何运行转型

Javascript(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')

相关内容