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,等等…现在奇怪的是,如果我改变convert
为echo
和前置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命令。
- child_process.spawn带括号的参数
- 当使用bas64string作为参数调用时,节点gm(imagemagick)似乎不起作用
- Node.js在Windows 7上看不到ImageMagick
- node.js将imagemagick的输出上传到AWS S3
- 我如何在AWS Lambda上安装GraphicsMagick或ImageMagick?
- D3JS:如何将SVG文本转换为path?
- 如何解决这个错误与node.js和node-imagemagick:错误:命令失败:execvp():权限被拒绝?
- 在Azure网站上使用Node.js进行image processing
- 在Node.js中对图像应用半透明水印