4

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

4

3 回答 3

6

更新:

由于问题/答案很老,所以 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 的函数(称为“动词”)。要获取所有动词的列表,请inkscape --verb-list在命令行上调用。您正在寻找的是SelectionSimplify.

因此,您必须编写一个小脚本,从 svg 中过滤出每个 id,并使用这些 id 调用 inkscape。像这样的东西(优化所有路径并在最后退出inkscape)

inkscape filename.svg --verb=EditSelectAll --verb=SelectionSimplify --verb=FileSave --verb=FileClose --verb=FileQuit
于 2011-09-07T13:06:25.797 回答
4

从Fabian的答案扩展,为了控制简化函数的阈值,我发现我需要使用包含我想要的阈值的最小首选项文件制作一个假主目录。这是我刚刚放在一起的一个简单脚本。

简化.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
于 2016-06-04T08:32:34.960 回答
-1

Inkscape 的替代品

使用SVGO(将文件从 2.7 MB 减少到 350 KB)我得到了更好的结果。

您可以将此在线服务用于单个文件:https ://jakearchibald.github.io/svgomg/

于 2017-09-23T05:44:36.360 回答