如何将 Inkscape 生成的 SVG 文件的图层批量导出到位图以获取精灵?

平面设计 墨景 批量处理 精灵
2022-01-08 07:37:10

批量导出意味着我可能需要添加某些转换,例如抗锯齿、对比度修复和调整大小。这里的 SVG 意味着我正在使用 Inkscape。这里的一层是精灵。我目前将每个图层单独导出到位图,File > Export Bitmap但它很耗时。

在此处输入图像描述

  1. 有没有办法以编程方式从 SVG 文件批量导出图层?

  2. 或者 Inkscape 中是否存在一些批量导出按钮?

  3. 我特别需要为每个精灵使用相同的自定义区域,就像单击多次菜单一样,但这很愚蠢——也许是一些宏?

4个回答

您可以使用命令行导出所有图层。首先,看看我们有多少层或哪些层,用--query-allor -S

$ inkscape --query-all presentation.svg | grep layer | awk -F, '{print $1}'
layer1
layer2
layer3

使用图层的 id(exakt 名称),您现在可以使用--export-id=IDor-i-j, --export-id-only

$ inkscape presentation.svg -i layer1 -j -C --export-png=layer1.png

-C, --export-area-page定义导出区域(整页,在文档属性中定义)。您也可以使用--export-ps,--export-pdf--export-eps其他一些。


要使其自动化,您可以生成一个命令列表:

$ for id in `seq 1 15`; do echo "presentation.svg -jC -i layer$id -e layer$id.png"; done
presentation.svg -jC -i layer1 -e layer1.png
presentation.svg -jC -i layer2 -e layer2.png
presentation.svg -jC -i layer3 -e layer3.png

当您将其保存在文件中(此处commands.txt)时,您可以像这样调用inkscape:

$ inkscape --shell < commands.txt

执行所有列出的命令。

感谢 Freenode 的#inkscape 频道,用户su_.*verbalsh.*. su_.*提供了以下大部分想法。请注意,导出到栅格意味着信息丢失。此外,Inkscape 有anti-alias-always-on-in-exportation-feature 和odd no-control-with-contrast-in-exportation-feature 等奇怪的特征,意味着额外的信息损失。su_.* 在此上下文中提到:“始终抗锯齿,与画布上的渲染器相同”

根据su_*“JessyInk 的作者对相关问题的较早回答”在这里您将每个图层与一个公共背景图层一起导出(它定义了 bg 颜色或可能导出大小)。

相关功能请求

  • “可选地禁用位图导出的抗锯齿”-此处的线程或更新的“终止位图导出的抗锯齿”-此处的线程

  • 此处的粒度 PNG 导出选项

  • '功能请求 - 将图层导出到 PNG 序列......'(主要是 GUI)在这里

  • “从命令行界面选择性地导出图层” - 在这里已经可以使用“--export-id”的 AFAIU

候选解决方案

  • JessyInk:“与 Inkscape 捆绑的扩展程序,用于创建基于图层的演示文稿,其中包括一种名为“JessInk zipped pdf or png putput ( .zip)”的输出格式(通过“保存”)*。“可以选择每层使用 PDF 或 PNG 创建一个 zip 存档”更多 在这里

  • “[E]xport by id from the command line”,但存在一些问题,例如隐藏其他层的额外工作“如果精灵都在彼此之上”将每个图层导出为 png 的示例 shell 脚本

  • “[D] 在命令行上定义导出区域”,更多信息请点击此处

  • 【新奇想法】 “又一个外部扩展(专门用来制作动画)也可以将每一层批量导出为位图”,更多 看这里

参考

  1. 关于导出的 Inkscape 手册在这里

  2. 命令行 - 使用说明,带有$ inkscape --usage.

好吧,很抱歉恢复了一个解决方案已被接受的线程。

我遇到了同样的“批量图层导出”问题,除了我想一起导出图层组,例如 LAYER0+LAYER1、LAYER0+LAYER2、LAYER1+LAYER2。JessyInk 和 Inkscape Launchpad 中的脚本文件都不适合我……

这是我阅读的第一个答案之一,它为我编写的自定义轻量级脚本提供了一些宝贵的链接,我现在与大家分享,希望它有用: https ://sites.google.com/site/ rameyarnaud/媒体/图像/inkscape-export-svg-layers-to-gif-animation

干杯!

我认为 Inkscape 没有这样的选择。一种解决方法是使用链ExportOverlays + Ghostscript

  1. ExportOverlays 将n 个Inkscape 图层导出到n 个pdf 文件中。更多在这里

  2. 然后使用 ghostscript,将每个 pdf 转换为位图。更多在这里

这会在 Linux 系统上“将图层批量导出为位图”。我不知道 Mac 和 Windows 的操作方法。