I'm using gm and trying to process images according to it's size. Since "size" getter needs callback function, I can't use size in following lines.
What I want to do is like that:
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)
}
I want to use width in following resize method. Is there any way to get size synchronously or wait for a callback to complete? I don't want to use ivars as long as possible.
Since img.size()
is asynchronous, you can't do the operation synchronously (which means you also can't use return
for a return value). Therefore, you need img.size()
to finish before you can do anything else. You can either assign a callback within the operation, or pass callbacks around:
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);
});
You can use the "image-size" npm package
var sizeOf = require('image-size');
var dimensions = sizeOf("/pathofimage/image.jpg");
console.log(dimensions.width, dimensions.height);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With