【问题标题】:image resizing in node.js在 node.js 中调整图像大小
【发布时间】:2012-10-11 05:26:12
【问题描述】:

我正在尝试通过此程序调整 node.js 中的图像大小。

https://github.com/LearnBoost/node-canvas/blob/master/examples/resize.js

var Canvas = require('canvas')
  , Image = Canvas.Image
  , fs = require('fs');

var img = new Image
  , start = new Date;
img.src = __dirname + 'flowers.jpg';

console.log('Resized and saved in %dms');
img.onload = function(){
  console.log('Resized and saved in buffer');
  try{
  var width = img.width / 2
    , height = img.height / 2
    , canvas = new Canvas(width, height)
    , ctx = canvas.getContext('2d');
  ctx.drawImage(img, 0, 0, width, height);
  canvas.toBuffer(function(err, buf){
    console.log('Resized and saved in buffer');
    fs.writeFile(__dirname + '/resize.jpg', buf, function(){
      console.log('Resized and saved in %dms', new Date - start);
    });
  });
  }catch(e){
    console.log(sys.inspect(e));
  }
};

img.onerror = function(err){
  throw err;
};

程序没有进入onload函数为什么? 编辑 : 在附加 onload 和 onerror 事件后尝试 img.src 时出现此错误?

`Resized and saved in NaNms

/home/reach121/rahul/knox/index.js:33
 throw err;
 ^
Error: error while reading from input stream
   at Object.<anonymous> (/home/reach121/rahul/knox/index.js:35:9)
   at Module._compile (module.js:404:26)
   at Object..js (module.js:410:10)
   at Module.load (module.js:336:31)
   at Function._load (module.js:297:12)
   at Array.0 (module.js:423:10)
   at EventEmitter._tickCallback (node.js:170:26)

使用 Image Magic 给我这个错误:

reach121@youngib:~/rahul/knox$ sudo node index.js

node.js:178
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Command failed: execvp(): No such file or directory

    at ChildProcess.<anonymous> (/usr/local/lib/node/.npm/imagemagick/0.1.2/package/imagemagick.js:64:15)
    at ChildProcess.emit (events.js:67:17)
    at Socket.<anonymous> (child_process.js:172:12)
    at Socket.emit (events.js:64:17)
    at Array.<anonymous> (net.js:826:12)
    at EventEmitter._tickCallback (node.js:170:26)

代码:

var im = require('imagemagick');

im.resize({
  srcPath: __dirname + '/flowers.jpg',
  dstPath: __dirname + '/flowers-small.jpg',
  width:   '50%'
}, function(err, stdout, stderr){
  if (err) throw err
  console.log('resized')
});

【问题讨论】:

    标签: image-processing canvas node.js


    【解决方案1】:

    您是否在附加onloadonerror 事件后尝试设置img.src?刚刚注意到这是原始示例与您的示例之间的差异。

    另一个问题:onerror 事件是否被触发?如果是这样,抛出的异常可能会有所帮助。

    更新

    如果您只想调整图像大小而不需要使用任何特定于画布的操作,只需使用ImageMagicknode-imagemagick。我刚刚做了一个小测试,它开箱即用:

    var im = require('imagemagick');
    
    im.resize({
      srcPath: __dirname + '/koala.jpg',
      dstPath: __dirname + '/koala-small.jpg',
      width:   '50%'
    }, function(err, stdout, stderr){
      if (err) throw err
      console.log('resized')
    });
    

    【讨论】:

    • `调整大小并保存在 NaNms /home/reach121/rahul/knox/index.js:33 throw err; ^ 错误:从 Object. (/home/reach121/rahul/knox/index.js:35:9) 在 Object._compile (module.js:404:26) 的输入流中读取时出错。 js (module.js:410:10) 在 Module.load (module.js:336:31) 在 Function._load (module.js:297:12) 在 Array.0 (module.js:423:10) 在EventEmitter._tickCallback (node.js:170:26)
    • @Rahul 你需要安装 imagemagick。 node-imagemagick 只是执行安装的二进制文件github.com/rsms/node-imagemagick/blob/master/imagemagick.js
    • 在发布更多错误之前,请考虑阅读模块上的文档。
    • 我已经安装了imagemagick ..请检查错误
    • 你在哪里安装了 imagemagick?在您的 PATH 环境中或其他地方(例如在您的主目录中)?
    【解决方案2】:

    要使 node_imagemagick 模块正常工作,您需要安装 imagemagick CLI 接口,

    在 Mac 上,它可以很简单:

    brew install imagemagick
    

    但这真的取决于你的具体系统。

    【讨论】:

      【解决方案3】:

      __dirname 没有尾部斜杠。

      改成这样:

      img.src = __dirname + '/flowers.jpg';
      

      并在设置 img.src 之前附加事件处理程序,就像@schaermu 说的那样。

      【讨论】:

        【解决方案4】:

        仅供参考,您的 console.log 语句使用 %d 但引用的字符串后没有变量。 (我不确定这是否能解决您的其他错误。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-15
          • 2017-03-25
          • 1970-01-01
          • 2014-07-24
          • 2015-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多