NodeJS gm同步获取图像大小

tai*_*ino 8 asynchronous node.js node-imagemagick

我正在使用gm并尝试根据它的大小处理图像.由于"size"getter需要回调函数,我不能在以下行中使用size.

我想做的是这样的:

function processImage(url) {
    var img = gm(this.getImgStream(url));

    var width, height;
    img.size(function(err, val) {
        width = val.width;
        height = val.height;
    });

    // I want to use width here, but it's undefined when this line is executed.
    if (width > 500) width = 500;
    return img.resize(width)
}
Run Code Online (Sandbox Code Playgroud)

我想在下面的resize方法中使用width.有没有办法同步获取大小或等待回调完成?我不想尽可能长时间地使用伊娃.

hex*_*ide 9

由于img.size()是异步的,因此无法同步执行操作(这意味着您也无法使用return返回值).因此,您需要img.size()在完成任何其他操作之前完成.您可以在操作中分配回调,也可以传递回调:

function processImage(url, callback) {
  var img = gm(this.getImgStream(url));

  var width, height;
  img.size(function(err, val) {
    width = val.width;
    height = val.height;

    callback(err, width, height);
  });
};

processImage(url, function(err, width, height) {
  if (width > 500) width = 500;
  img.resize(width);
});
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用“ image-size” npm包

var sizeOf = require('image-size');
var dimensions = sizeOf("/pathofimage/image.jpg");
console.log(dimensions.width, dimensions.height);
Run Code Online (Sandbox Code Playgroud)