如何在NodeJS中使用gm调整多个图像的大小?

时间:2015-12-15 17:09:44

标签: javascript node.js

我在ExpressJS上有一个人们可以上传图像的网站,当然,我必须将其调整为标准尺寸。问题是,我写了一段代码,如果用户只上传一个图像,如果上传了两个或三个,NodeJS崩溃了。我确定,问题是在我的函数调用for循环中,我尝试了一些不同的方法,但是没有解决问题。希望你能帮我!

// ...

var resizeImage = function(image) {
  gm(image)
    .size(function(err, size) {
      if (!err) {
        if (size.width > size.height && size.width > 1024) {
          gm(image)
            .resize(1024, null)
            .write(image, function(err) { if (err) throw err; });
        } else if (size.width < size.height && size.height > 800) {
          gm(image)
            .resize(null, 800)
            .write(image, function(err) { if (err) throw err });
        } else if (size.width === size.height && size.height > 800) {
          gm(image)
            .resize(null, 800)
            .write(image, function(err) { if (err) throw err });
        }
      }
    });
};



if (rawImagesPath.length) {
  for (var j = 0; j < rawImagesPath.length; j++) {
    resizeImage(rawImagesPath[j]);
  }
}

// ...

1 个答案:

答案 0 :(得分:0)

最后,我找到了如何解决这个问题!这是代码!

    var xy = 0;

    var resizeImage = function() {
        var thisImage = rawImagesPath[xy];


        gm(thisImage)
            .size(function(err, size) {
                if (err)
                    console.log(err);


                if (!size) {
                    xy = 2;
                } else if (size.width > size.height && size.width > 1024) {
                    gm(thisImage)
                        .resize(1024, null)
                        .write(thisImage, function(err) { if (err) console.log(err); });
                } else if (size.width < size.height && size.height > 800) {
                    gm(thisImage)
                        .resize(null, 800)
                        .write(thisImage, function(err) { if (err) console.log(err); });
                } else if (size.width === size.height && size.height > 800) {
                    gm(thisImage)
                        .resize(null, 800)
                        .write(thisImage, function(err) { if (err) console.log(err); });
                }


                if (xy == 2)
                    clearInterval(yz);
                else
                    xy++;
            });
    };


    var yz = setInterval(resizeImage, 1000);