2015-02-10 41 views
1

我有一个imagemagick脚本,我需要在节点中使用。它适用于child_process.exec函数。我不确定如何将它发送给exec命令,所以我试图使用产卵。child_process.spawn在参数中带括号

这工作正常。没问题。

var spawn = require('child_process').spawn; 
    var args = [ 
    '-', 
    '-resize', 
    '50%', 
    './blank.png', 
    '-composite', 
    '-' 
    ]; 
    var convert = spawn('convert', args); 

现在的问题是我需要分离出blank.png图像并对其应用转换。 Image Magick没有问题。 http://www.imagemagick.org/Usage/basics/#parenthesis

因此,开始使它看起来像这样。

convert image.jpg \ 
    \(blank.png -resize 50% \) -gravity center -composite -composite output.jpg 

我不能用nodejs中的spawn args得到这个结果。 我试过类似的东西。

var args = [ 
    '-', 
    '\(', 
    './blank.png', 
    '-resize', 
    '50%', 
    ' \), 
    '-composite', 
    '-' 
    ]; 

    var args = [ 
    '-', 
    '(', 
    './blank.png', 
    '-resize', 
    '50%', 
    '), 
    '-composite', 
    '-' 
    ]; 


    var args = [ 
    '-', 
    '\(./blank.png -resize 50% \)', 
    '-composite', 
    '-' 
    ]; 

没有什么似乎工作。他们都将错误的参数传递给函数。我只是得到转换错误。有任何想法吗?

固定

var args = [ 
    '-', 
    '-resize', 
    '100%', 
    '(', 
    './blank.png', 
    '-resize', 
    '50%', 
    ')', 
    '-composite', 
    '-' 
    ]; 
+0

我不*说* node-ish,但反斜杠是为了保护括号不被shell解释 - 是否有可能在这里没有涉及的shell,并且你不需要它们? – 2015-02-10 13:27:24

+0

问题是我需要他们告诉图像magick将转换仅应用于blank.png图像,而不是从流中传入的图像。 – 2015-02-10 13:36:00

+0

为什么这会阻止你删除反斜杠? – 2015-02-10 13:52:21

回答

1

你需要躲避转义字符。记住'\'的含义也是在Javascript字符串中。

var args = [ 
    '-', 
    '\\(', 
    './blank.png', 
    '-resize', 
    '50%', 
    '\\)', 
    '-composite', 
    '-' 
    ]; 
var convert = spawn('convert', args);