我希望能够自动化inkscape命令“简化路径”。具体来说,我想要一个命令行工具,它以svg文件作为输入,对图中所有路径应用“简化路径”并保存一个新的(更小的)svg文件。这是否可以在inkscape中实现?有没有免费的命令行工具(我正在使用linux),可以完成这项工作?
更新(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'
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
扩展自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的工具
我使用SVGO获得了更好的结果(将一个2.7 MB的文件压缩到了350 KB)。
你可以使用这个在线服务来处理单个文件:https://jakearchibald.github.io/svgomg/
inkscape file.svg --batch-process --actions='EditSelectAllSelectionSimplify;FileSave;FileClose'
。如果在Windows上,这是inkscape.com
而不是inkscape.exe
。 - Oren Ben-KikiInvalid option --batch-process
- user924