2

我正在创建一个图像处理 API。我写了一个例子来计算图像上的 FFT。此示例在本地运行,但在 Heroku 上失败(没有错误,但没有输出)。

我怀疑我的代码需要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);
    });
  });
}
4

2 回答 2

3

这也值得注意,这对我有用

http://aaronheckmann.tumblr.com/post/48943531250/graphicsmagick-on-heroku-with-nodejs

像这样简单地初始化gm

var gm = require('gm').subClass({
    imageMagick: true
});

正确初始化imagemagickheroku 安装的二进制文件。

比直接使用gm...

于 2015-01-05T06:35:16.120 回答
2

有几个选项;一是修改Heroku NodeJS buildpack,添加必要的脚本来下载和编译ImageMagick。

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

其次,您可以exec用来检查convertIM 或 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();
    }
  });

至于安装脚本,看看这个链接;我在一个 grunt 任务中使用它(在 上编译npm install),但我可以验证 Heroku 是否会编译它。

在该示例中,请注意我没有运行make install以使二进制文件全局可用;我不确定在 Heroku 的初始化中是否有可能。如果没有,您可以查看 node-imagemagick 是否允许您指定二进制路径,或者使用 buildpack 路由。

于 2013-10-28T20:51:52.273 回答