2013-10-28 34 views
2

我正在創建一個圖像處理API。我已經寫了一個例子來計算圖像上的FFT。這個例子在本地運行,但在Heroku上失敗(沒有錯誤,但沒有輸出)。ImageMagick與Heroku上的FFTW

我懷疑我的代碼需要ImageMagick與FFTW一起安裝。有沒有辦法在Heroku上做到這一點?西港島線或迫使我尋找新的供應商我的應用程序

var gm = require('gm').subClass({ imageMagick: true }); 
var im = require('imagemagick'); 
exports['fft'] = function (req, res, next) { 
    var image = __dirname + '/' + req.query.image; 
    var image_out = __dirname + '/tmp/output-0.png'; 
    im.convert([image, '-fft', './tmp/output.png'], function(req, resp, next){ 
    im.convert([image_out, '-auto-level', '-evaluate', 'log', '100000', './tmp/output-0.png'], function (req1, resp1, next1){ 
     var base = gm(image_out); 
     write(base, res, next); 
    }); 
    }); 
} 

回答

2

有幾個選項;一個是修改Heroku NodeJS buildpack,並添加必要的腳本來下載和編譯ImageMagick。

https://devcenter.heroku.com/articles/buildpacks#using-a-custom-buildpack

其次,你可以使用exec檢查convert或IM的其他部分,如果它不存在運行安裝腳本。

var exec = require('child_process').exec; 

    exec('convert', function(error, stdout, stderr) { 
    if (error) { 
     exec('./install_script', function(error, stdout, stderr) { 
     if (!error) { 
      initApp(); 
     } 
     }); 
    } else { 
     initApp(); 
    } 
    }); 

至於安裝腳本,take a look at this link;我用它在一個咕task任務(編譯在npm install),但我可以驗證Heroku會編譯它。

在這個例子中,請注意我是而不是運行make install使全局可用的二進制文件;我不確定在Heroku的初始化過程中是否有可能。如果沒有,您可以看看node-imagemagick是否允許您指定二進制路徑,或者轉到buildpack路徑。