NodeJS gm同步获取图像大小

我正在使用gm并尝试根据其大小来处理图像。 由于“大小”getter需要callback函数,我不能在下面的行中使用大小。

我想要做的就是这样:

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) } 

我想在下面的resize方法中使用宽度。 有没有办法让大小同步或等待callback完成? 我不想尽可能长时间使用ivars。

由于img.size()是asynchronous的,所以不能同步执行操作(这意味着你也不能使用return作为返回值)。 因此,您需要img.size()才能完成任何其他操作。 您可以在操作中分配callback,也可以传递callback:

 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); }); 

您可以使用“图像大小”NPM包

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