自动化简化svg文件中的路径(使用inkscape)

5

我希望能够自动化inkscape命令“简化路径”。具体来说,我想要一个命令行工具,它以svg文件作为输入,对图中所有路径应用“简化路径”并保存一个新的(更小的)svg文件。这是否可以在inkscape中实现?有没有免费的命令行工具(我正在使用linux),可以完成这项工作?

3个回答

7

更新(2023-06-07):

再次在v1.2中更改了命令行。现在应该是类似这样的(未经测试!):

inkscape backpacks-svgrepo-com.svg --batch-process --actions='select-all;path-simplify;export-plain-svg'

你可以通过运行以下命令来获取所有操作的列表:
inkscape --action-list

选择适合您需求的选项。保存操作稍微有些棘手,因为它没有在操作列表中列出。使用手册上大致是这样说的:

此外,还有与所有导出选项匹配的操作(要使用它们,只需删除选项前面的“--”前缀,并将“=”替换为“:”)


更新(2021年):

由于问题/答案相当古老,Inkscape命令行已经发生了变化。

inkscape file.svg --batch-process --actions='EditSelectAll;SelectionSimplify;FileSave;FileClose'

还可以看一下Oren Ben-Kiki或Pix的评论。
原文: 应该是可能的:

http://tavmjong.free.fr/INKSCAPE/MANUAL/html/CommandLine.html

演示如何从命令行调用Inkscape(称为“verbs”)的函数。要获取所有verbs的列表,请在命令行上调用inkscape --verb-list。你要找的是SelectionSimplify

因此,您需要编写一个小脚本,该脚本将从svg中筛选出每个id,并使用这些id调用inkscape。类似于以下内容(优化所有路径,并在最后退出inkscape)

inkscape filename.svg --verb=EditSelectAll --verb=SelectionSimplify --verb=FileSave --verb=FileClose --verb=FileQuit

请问如何使用Inkscape CLI保存SVG文件?我的回答是,所谓的CLI模式动词需要GUI,请勿使用“-z”或“--without-gui”。 - Édouard Lopez
这似乎在某些Inkscape版本中出现了故障 - 它会出现“需要GUI”错误。此外,似乎不再有“FileQuit”动词? - Oren Ben-Kiki
1
截至版本1.0.2,正确的方式似乎是inkscape file.svg --batch-process --actions='EditSelectAllSelectionSimplify;FileSave;FileClose'。如果在Windows上,这是inkscape.com而不是inkscape.exe - Oren Ben-Kiki
Invalid option --batch-process - user924
不适用于1.2.2版本(既不是旧命令,也不是新命令) - user924

4

扩展自Fabian的回答,为了控制简化函数的阈值,我发现需要创建一个虚假的主目录,并在其中放置一个带有期望阈值的最小化配置文件。这里是我刚刚写的一个简单脚本。

simplify.sh:

#!/bin/bash
FILENAME=$1
THRESHOLD=$2
FAKEHOME=$(mktemp -d)
mkdir -p $FAKEHOME/.config/inkscape
cat > $FAKEHOME/.config/inkscape/preferences.xml <<EOF
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<inkscape
  xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  version="1">
  <group
    id="options">
    <group
      id="simplifythreshold"
      value="${THRESHOLD}" />
  </group>
</inkscape>
EOF
# for Inkscape < 1.0
#HOME=$FAKEHOME inkscape $FILENAME --verb=EditSelectAll --verb=SelectionSimplify --verb=FileSave --verb=FileClose
# for Inkscape > 1.0
HOME=$FAKEHOME inkscape --with-gui --batch-process $FILENAME --verb='EditSelectAll;SelectionSimplify;FileSave'
#rm -rf $FAKEHOME

感谢您提供的脚本。在当前版本的Inkscape中,我不得不添加--with-gui和--batch-process标志才能使其正常工作,并将动词分组到一个--verb参数中。我编辑了您的答案--希望您不介意。现在似乎需要GUI和图形环境。 - a sad dude

-3

3
有没有 SVGO 的选项可以像 Inkscape 的 "simplify" 一样简化路径信息?除非我漏了什么,否则它似乎只能进行编码的无损优化。 - pix
@pix 你应该直接去SVGO提问:https://github.com/svg/svgo/issues - Adrian
2
@Adrian 我猜这是因为你的回答只包含了一个库/程序的链接,没有进一步的说明如何使用它或解决这个特定的问题。 - Fabian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接