【问题标题】:node.js to imagemagick command breakingnode.js 到 imagemagick 命令中断
【发布时间】:2011-08-12 05:13:04
【问题描述】:

我正在通过 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);
});

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

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

根据一些论坛,这通常意味着 IM 由于路径无效等原因无法打开图像......现在奇怪的是,如果我将 convert 更改为 echo 并在前面添加convert我得到以下命令:

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

直接从 bash 运行时效果很好。

有什么想法吗?

更多信息:

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

【问题讨论】:

    标签: javascript node.js imagemagick


    【解决方案1】:

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

    仍然不知道发生了什么,但只需创建一个 shell 脚本:

    eval 'convert '$@
    

    并将其作为命令运行(而不是 convert)可以解决问题。 wtf???

    【讨论】:

    • 听起来像是转换的问题
    【解决方案2】:

    node.js 是否以同一用户身份运行?可能只是您的用户对文件有权限,但运行 node.js 的用户没有。

    【讨论】:

      【解决方案3】:

      从你所说的你拥有主机...所以很可能 apache 没有访问 /usr/sbin/convert 的权限。

      我遇到了这个问题,我将convert 链接到/usr/local/bin 解决了这个问题:

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

      我更改了脚本中的路径,一切正常。 如果这不起作用并且 apache 仍然无法访问 /usr/local/bin 目录,请在此处创建一个 apache 文件夹,并在该文件夹中授予对 apache 的完全访问权限,并将 convert 链接到该文件夹​​。

      【讨论】:

      • which convert 显示/usr/local/bin/convert(也来自节点内部)。并且节点像我一样运行(通过whoami验证)
      • @jcolebrand 不管是 apache 还是其他任何东西......都会出现同样的问题,但我的解决方案似乎对他没有帮助,尽管我的建议是一个很好的......
      【解决方案4】:

      我相信(未经测试)问题出在参数中的双引号

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

      您在这里的目标是将整个字符串作为单个参数发送,而不是四个单独的单词。但是,您已经通过使其成为命令行参数列表中的单个元素来做到这一点。额外的双引号实际上会被解释为参数的一部分。 因此,将参数更改为

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

      而且您不需要任何额外的 eval 命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        • 1970-01-01
        • 2017-02-05
        • 2011-12-12
        • 1970-01-01
        相关资源
        最近更新 更多