使用 Inkscape/OS/Freeware 将矢量文件中的多个对象保存到单独的文件中

平面设计 向量 墨景
2022-01-25 09:57:19

我有一个下载的矢量文件(AI 格式)。该文件包含各种犬种的简单矢量图像。我已经在inkscape中加载了文件,将它们取消分组,并希望有一种方法可以将每个狗矢量保存为单独的文件。有没有办法使用 Inkscape 或其他一些操作系统/免费软件工具自动执行此操作?否则我将不得不选择每个并另存为。非常感谢任何帮助!

更新感谢 JSBueno 关于编辑实际 SVG 文件的建议。我没有意识到 SVG 只是一个 XML 文件。我应该能够轻松浏览文件并将每只狗导出为单独的文件。顺便说一句,这将比通过作为本文目标的界面进行操作要快得多。感谢大家的建议。

4个回答

我发现有两种解决方案可以将 Inkscape 中的多个对象导出为 SVG。这些方法的好处是可以作为脚本自动运行,并且不需要在文本编辑器中编辑 SVG。

  1. svg-对象-导出

svg-objects-export 脚本通过基于正则表达式导出所有对象来工作。在您的情况下,它可以通过导出具有特定 ID 的所有对象来工作。要使用它首先克隆或从 Github 下载脚本

在 Inkscape 中,您需要将要导出的所有对象的 ID 更改为具有相同的文件名模式。为此,请转到 Object > Object Properties 或按Ctrl+ Shift+打开 Object Properties 对话框O在 ID 字段中,将它们全部更改为具有相同的基本名称 ID,例如Dog_1(对象不能具有相同的 ID)。Dog_2Dog_3

在此处输入图像描述

保存文件并下载脚本后,在终端中运行以下命令

python svg-objects-export.py --pattern 'Dog_*' /path/to/your/file.svg

这将导出所有基本名称 ID 为“Dog_”的对象。

  1. inx 导出对象

inx-exportobjects inkscape 扩展将简单地导出所有选定的对象。要使用它首先克隆或从 Gitlab 下载扩展要安装它,请将文件复制export_objects.inx. 在 Inkscape 中,您将在 Extensions > Exports 中有一个名为“Objects to Files...”的选项。选择要安装的对象并选择此选项。export_objects.py.config/inkscape/extensions/

在此处输入图像描述

在此对话框中,只需将导出目录更改为您要保存文件的位置,并将基本名称更改为文件的新名称,然后按应用。

在此处输入图像描述

文件将被导出到您指定的目录。

每个解决方案都有许多其他选项,例如动画 gif 导出,您绝对应该尝试一下。

根据前提条件,您的所有对象都被分组而不是组合成更大的组,这里是如何做到的。(我在示例中使用了猫,因为没有狗)。

在此处输入图像描述 在右下方,您会看到一只突出显示的猫,对象 id 5358,它是一条路径,所以我稍后添加了一个绿色地板,将其更改为稍后会出现的对象 5364,所以不要让您感到困惑。:)

您可以通过点击右侧的按钮 4(箭头 1)来获得 xml 编辑器。

我将 g5358 更改为 g-cat-5358(字段 4),以使 texttool 可以轻松选择这些对象,这些对象适用于大多数不与 xml-svg-names 冲突的元素(颜色、元、id、... )。

在左侧窗口中,您看到已经有一个重命名的实体,g-cat-5312 在同一缩进级别靠近顶部。

Inkscape 为组组织了唯一的 id,但它们不需要是 gNUMBER 的形式,你可以混入其他字符。只是不要选择已经存在的标识符。

更改标识符后,点击“setzen (set)”(5) 以确认您的更改。你在这里看到一个德语界面,YMMV。

保存 svg(作为 demo-cats.svg)。我们现在切换到脚本。

for cat in $( grep g-cat- demo-cats.svg )
do
  id=${cat//[^0-9]/}
  echo $id
  (head -n 53 demo-cats.svg; sed -n "/$cat/,/^    <\/g>/p" demo-cats.svg; echo "</svg>" ) > cat-${id}.svg
done

它有什么作用?它用 greps(用 grep 搜索)寻找“g-cat-”模式,这是我们有趣部分的开始。 id=${cat//[^0-9]/}从表达式中提取 bash 中的 id。Echo 将其打印到屏幕上,如果出现问题,这将有助于找到错误。head -n 53 demo-cats.svg 从包含所有 svg-boilerplate 的 svg 中获取前 53 行。根据您使用不同 svg 格式(inkscape、压缩、普通 svg、inkscape 压缩)的设置,这可能会有所不同。nl demo-cats.svg | less您可以计算线条找到适合您情况的正确切割点。

  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
     <g

^到这部分为止,应该包括行。

下一个命令是用s处理的sed完成的:说 ( -nsed -n "/$cat/,/^ <\/g>/p" demo-cats.svg; ) 不打印 (但是) 搜索 cat 组,直到缩进级别 2 处的结束标记 g,如果你没有,则在</g>if you didn't之前 4 个空格更改 Inkscape 首选项,如果您这样做了,您可能会记得。然后添加 svg: 的结束标签echo "</svg>"将输出写入文件 'cat-$id.svg' (这会以静默方式覆盖现有文件)。

所以我最终得到了两个文件: cat-5312.svg 和 cat-5364.svg 。

使用用于搜索和编辑 xml 文件的 xmlstarlet 或类似工具应该可以提供更优雅的解决方案。不幸的是,我不习惯它,并且在阅读了 10 分钟的文档后并没有让它工作。您不需要在开始时重命名组。

我已经尝试过这个 inkscape 扩展,它非常好用且易于使用(我使用 Windows 10、inkscape 1.0)

墨水搬运工

一个扩展程序,可帮助您通过其 ID 将 SVG 文件中的对象导出为多种格式(SVG、JPG、PDF、多 PDF 页面、WEBP 和 EPS)。如果您是书籍创作者、图标设计师、市场卖家、网页设计师,此扩展将帮助您完成任务。此扩展也可用作 CLI 版本 ( https://inkporter.raniaamina.id )。

Inkporter 是如何工作的?简单的解释是,Inkporter 将读取您设置的 ID 模式(即 icon-1、icon-2、icon-3 等),然后将它们导出为您需要的文件格式。Inkporter 让您感觉就像在 Inkscape 中处理类似画板的页面或多个页面。

您如何使用 Inkporter?只需将 Inkporter 目录、inkporter.inx 和 inkporter.py 复制并粘贴到 Inkscape 扩展目录即可。如果安装正确,您会在 Extensions -> Export -> Inkporter 中找到 Inkporter 菜单。

有关完整指南和所需的依赖项,请参阅 README.md 文件。

对于 1.0 及更高版本(使用 1.1.2 测试),还有Rania Amina 的扩展 Inkporter,可以从GitHub Page下载。

在此处输入图像描述

要在 Windows 下安装它,请下载存档并以这样的方式解压它,您最终会在 Inkscape 扩展目录中找到一个文件夹,其中包含以下内容:

Inkscape
 └Extensions
  └Inkporter
   ├inkporter_data
   ├inkporter.ico
   ├inkporter.inx
   ├inkporter.py
   ├inkporter.bat

通常在你的profile文件夹里面%APPDATA%,有类似的东西<user-name>\AppData\Roaming\Inkscape\Extensions\Inkporter

如果安装成功,启动 Inkscape 后,您应该会在Extensions > Export > Inkporter下看到一个新条目。

从那里您可以为 ID 模式设置通配符以选择要导出的内容,以及执行此操作的文件格式,例如 JPEG、SVG、PDF 等。

在此处输入图像描述