自动化'简化路径'对于svg文件(使用inkscape)

时间:2011-09-04 13:39:55

标签: svg inkscape

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

3 个答案:

答案 0 :(得分:4)

应该可以:

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

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

因此,您必须编写一个小脚本来过滤svg中的每个id,并使用id调用inkscape。类似的东西:

inkscape filename.svg --select=pathID --verb=SelectionSimplify --verb=FileSave --verb=FileClose

我不知道您是否可以使用所有ID链接呼叫,您必须为每个SVG调用一次inkscape

答案 1 :(得分:1)

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
HOME=$FAKEHOME inkscape $FILENAME --verb=EditSelectAll --verb=SelectionSimplify --verb=FileSave --verb=FileClose
#rm -rf $FAKEHOME

答案 2 :(得分:-1)

替代Inkscape

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

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