2013-10-29 24 views
7

gm kullanıyorum ve görüntüleri boyutuna göre işliyorum. "Boyut" alıcısının geri arama işlevine ihtiyacı olduğundan, aşağıdaki satırlarda boyut kullanamıyorum.NodeJS gm resim boyutu eşzamanlı olarak alınılıyor

Ne yapmak istiyorum böyledir:

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

Ben boyutunu yöntemini aşağıdaki genişliğini kullanmak istiyorum. Boyutu eşzamanlı olarak almanın veya geri aramanın tamamlanmasını beklemenin bir yolu var mı? Ivar'ı mümkün olduğunca uzun süre kullanmak istemiyorum.

cevap

9

img.size() eşzamansız olduğundan, işlemi senkronize olarak yapamazsınız (bu ayrıca return değerini dönüş değeri için kullanamazsınız). Bu nedenle, başka bir şey yapmadan önce bitirmek için img.size() gerekir. Ameliyattan içinde geri arama atayabilir veya etrafında geri aramalar geçebilir ya:

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

kullanabilirsiniz ne görüntü ve biçimini almak istiyorsanız ?. . – Pavel

3

Sen "görüntü boyutu" npm paketi

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