2011-08-12 84 views
4

我打電話通過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); 
}); 

如果我運行的確切命令(改變的唯一事情是路徑,因爲他們是絕對的),我得到的,在標準錯誤:

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

其中,根據一些論壇上,通常意味着IM不能打開圖像由於具有無效路徑,等等...現在奇怪的是,如果我改變convertecho和prepend 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以同樣的方式給了我相應的目錄

回答

1

是Node.js的運行相同的用戶?它可能只是您的用戶擁有該文件的權限,但運行node.js的用戶不會。

1

從你在說什麼你擁有的主機...所以它更可能是阿帕奇沒有訪問/usr/sbin/convert的特權。

我有這個問題,我解決它連接到convert/usr/local/bin

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

我在劇本改路徑和所有工作得很好。 如果這樣不起作用,並且apache仍然無法訪問/usr/local/bin目錄,請在該文件夾中創建一個apache文件夾,然後完全訪問該文件夾上的apache並將convert鏈接到該文件夾​​。

+0

'which convert'顯示'/ usr/local/bin/convert'(也在節點內)。並且節點正在運行(通過'whoami'驗證) –

+0

他沒有運行apache – jcolebrand

+0

@jcolebrand無論,apache或其他任何東西......同樣的問題會發生,但似乎我的解決方案並不能幫助他,雖然我的建議是一個很好的.. –

0

我相信(未經測試),這個問題是在參數雙引號

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

什麼你在這裏瞄準是整個字符串發送作爲一個參數,而不是四個單獨的詞。但是,您已經通過將它作爲命令行參數列表中的單個元素來完成此操作。額外的雙引號實際上會被解釋爲參數的一部分。 因此,參數更改爲

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

,你應該不需要任何額外的eval命令。

+0

已經嘗試過,沒有運氣的問題。 –