我正在使用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)
}
我想在下面的resize方法中使用width。有没有办法同步获取大小或等待回调完成?我不想尽可能长时间地使用伊娃。
答案 0 :(得分: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);
});
答案 1 :(得分:4)
您可以使用“image-size”npm包
var sizeOf = require('image-size');
var dimensions = sizeOf("/pathofimage/image.jpg");
console.log(dimensions.width, dimensions.height);