Node.js 改变图片大小

3

我无法调整图片的大小。我正在使用Multer获取文件,但是如何调整此图像的大小呢?我尝试过Imagestick,但fs没有保存它们。

  router.post('/uploadAvatar', 
    multer({
      dest: './public/uploads/images/avatars',
      rename: function (fieldname, filename) {
        return 'avatar'+Date.now();
      }
    }), function(req, res) {
      // resize image
      res.json(newPath);
  });
1个回答

11

我喜欢在Node.js中使用Sharp模块来处理图片:

   router.post('/uploadAvatar', 
    multer({
      dest: './public/uploads/images/avatars',
      rename: function (fieldname, filename) {
        return 'avatar'+Date.now();
      }
    }), function(req, res) {
      // resize image
      sharp(newPath).resize(300, 200).toFile(newPath, function(err) {
         if (err) {
           throw err;
         }
         // output.jpg is a 300 pixels wide and 200 pixels high image
         // containing a scaled and cropped version of input.jpg
         res.json(newPath);
      });
  });

我可以完美地调整图像大小。但是,我只想保留已调整大小的文件。每次调整大小后,我都必须删除旧文件并保留已调整大小的文件。如果我将newpath设置为相同(相同的源和目标),则会显示错误。简而言之,我想知道是否有解决方案,使上传的图像可以通过覆盖上传的原始文件来调整大小。 - Mathew John
我在使用php时也遇到了同样的问题。我的解决方法是给原始图像一个名称,例如orginal.jpg,然后去掉绑定的扩展名(.jpg),重写为另一种不可执行的文件扩展名,例如original.me。这样做的好处是任何用户上传和调整大小的图像都将被命名为original.me,因此它们将互相替换。最终,您只会拥有一个original.me和基于图像上传数量而创建的无限数量的调整大小的文件。 - chinazaike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接