是否可以在一个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');
但这只会提取最后一张图片。
答案 0 :(得分:2)
exec()
本身并不慢。但是每次调用时,首先启动Inkscape,执行操作并再次关闭它。也就是说,需要很长时间。
不幸的是,Inkscape没有批处理模式。你可以使用Gimp,它可以批量执行相同的操作。
答案 1 :(得分:1)
exec()可能并不慢。服务器/ inkscape很慢。
答案 2 :(得分:1)
您可以在shell模式下运行Inkscape,并通过将命令写入其stdin来与之通信。如果您不想在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");