node.js到imagemagick命令中断

我打电话通过node.js imagemagick脚本和命令是打破,但我不明白为什么。

正是我想要做的一个简单的例子:

var spawn = require('child_process').spawn, ls = spawn('convert', ['-size', '168x45', 'xc:transparent', '-draw', '"image over 0,0 0,0 \'/path/to/img1.png\'"', '/path/to/out.png']); ls.stderr.on('data', function (data) { console.log('stderr: ' + data); }); 

如果我运行这个确切的命令(唯一改变的是path,因为它们是绝对的),我得到,在stderr上:

 "convert: non-conforming drawing primitive definition `image over 0,0 0,0 '/path/to/img1.png'' @ error/draw.c/DrawImage/3145." 

根据一些论坛,这通常意味着即时通讯无法打开图像,因为有一个无效的path,等等…现在奇怪的是,如果我改变convertecho和前置convert我得到以下命令:

 convert -size 168x45 xc:transparent -draw "image over 0,0 0,0 '/path/to/img1.png'" /path/to/out.png 

当从bash直接运行时,它是完美的。

有任何想法吗?

更多信息:

  • 我只是从图像的目录中尝试了这个,并删除了path(所以它的image over ... img1.png ),我得到了同样的错误。
  • 以相同的方式运行pwd给我相应的目录

find答案: http : //shchekoldin.com/2009/10/13/imagemagick-convert-problem/

仍然不知道发生了什么,但创build一个简单的shell脚本:

 eval 'convert '$@ 

并运行该命令(而不是convert )解决了这个问题。 跆拳道???

node.js是否以相同的用户身份运行? 这可能只是您的用户拥有该文件的权限,但运行node.js的用户不会。

从你说什么你拥有主机…所以更可能是Apache没有权限访问/usr/sbin/convert

我有这个问题,我解决了链接convert/usr/local/bin像:

 ln /usr/sbin/convert /usr/local/bin 

我改变了脚本的path,一切正常。 如果这不起作用,并且apache仍然无法访问/usr/local/bin目录,请在该文件夹中创build一个apache文件夹,然后完全访问该文件夹上的apache并链接到该文件夹​​。

我相信(没有testing)问题是在双引号中的问题

 '"image over 0,0 0,0 \'/path/to/img1.png\'"' 

你在这里瞄准的是把整个string作为一个单一的参数,而不是四个单独的单词。 但是,您已经通过将它作为命令行参数列表中的单个元素来完成此操作。 额外的双引号实际上会被解释为参数的一部分。 所以,改变参数

 'image over 0,0 0,0 \'/path/to/img1.png\'' 

你不应该需要任何额外的eval命令。