2

是否可以在一个 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');

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

4

3 回答 3

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");
于 2011-10-29T13:19:39.573 回答
2

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

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

于 2011-07-29T09:09:01.740 回答
1

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

于 2011-07-29T09:05:52.600 回答