【问题标题】:Run multi inkscape commands in one line在一行中运行多个 inkscape 命令
【发布时间】:2011-07-29 09:02:58
【问题描述】:

是否可以在一个 exec 命令中运行多个命令?我需要从 SVG 文件中抓取一些图像,但这个变体太慢了:

exec('inkscape file.svg --export-id=g123 --export-png=img1.png');
exec('inkscape file.svg --export-id=g124 --export-png=img2.png');
exec('inkscape file.svg --export-id=g125 --export-png=img3.png');

所以我需要在一行中完成所有操作。我已经试过了:

exec('inkscape file.svg --export-id=g125 --export-png=img3.png inkscape file.svg --export-id=g123 --export-png=img1.png');

但这只会提取最后一张图片。

【问题讨论】:

    标签: php inkscape


    【解决方案1】:

    exec() 本身并不慢。但每次调用时,您首先启动 Inkscape,执行操作并再次关闭它。也就是说,需要这么长时间。

    不幸的是,Inkscape 没有批处理模式。但是你可以使用Gimp,它可以批量执行相同的操作。

    【讨论】:

      【解决方案2】:

      您可以在 shell 模式下运行 Inkscape,并通过向其标准输入写入命令来与它通信。如果您不想在 PHP 中实现它,您可以编写一个简单的 shell 包装器来完成它 给你,例如:

      #!/bin/bash
      SVG="$1"
      shift
      (
      while [ "$1" != "" ] ; do
        echo "\"--file=$SVG\" \"--export-id=$1\" \"--export-png=$2\""
        shift 2
      done
      echo "quit"
      ) | \
        /path/to/inkscape --shell 2>/dev/null
      

      然后像这样使用它

      exec("/path/to/wrapper file.svg g123 img1.png g124 img2.png g125 img3.png");
      

      【讨论】:

        【解决方案3】:

        exec() 可能并不慢。服务器/inkscape 很慢。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-05
          • 2012-03-27
          • 1970-01-01
          • 2016-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多