Javascript 我可以使用node gm调整内存中图像的大小,还是需要先保存它?

Javascript 我可以使用node gm调整内存中图像的大小,还是需要先保存它?,javascript,node.js,image-processing,image-uploading,graphicsmagick,Javascript,Node.js,Image Processing,Image Uploading,Graphicsmagick,我允许用户上传头像,但我想在上传时调整它们的大小。现在,gm似乎让我在调整文件大小之前先将其保存到磁盘。当传入请求时,是否可以让它调整大小 大概是这样的: var readStream = fs.createReadStream(req.files['profile-picture']['path']); gm(req.files['profile-picture']['path'], 'img.jpg') .write('/path/to/directory/img.jpg', fun

我允许用户上传头像,但我想在上传时调整它们的大小。现在,gm似乎让我在调整文件大小之前先将其保存到磁盘。当传入请求时,是否可以让它调整大小

大概是这样的:

 var readStream = fs.createReadStream(req.files['profile-picture']['path']);

 gm(req.files['profile-picture']['path'], 'img.jpg')
 .write('/path/to/directory/img.jpg', function (err) {
   if (!err) console.log('done');
 });

您只需通过gm传输一个流,无需将文件保存到光盘!您甚至可以一个接一个地执行多个操作,因为gm函数是可链接的(在我的示例中,我调整了图像的大小,并在后记中从中间裁剪图像(因此是重力函数)


http.get('your-image-url')从您的示例中获取它,否?如果否,请解释。啊,我的错误,您没有尝试从远程获取,您正在上载。这应该更容易。我将修复我的答案。这不起作用:
gm(req.files['profile-picture']['path'],'img.jpg')。调整大小(“100^”,“100^”)。重心('Center')。裁剪(100,100).stream(函数(err,stdout,stderr){stdout.pipe(fs.createWriteStream('/uploads/'+'img.jpg');})
给了我以下错误:
events.js:71抛出参数[1];//未处理的'error'事件^error:enoint,open'/uploads/img.jpg'
so-req.files['profile\u-picture'['path']只是一个字符串。这需要是一个流对象才能工作。请参阅本文:,parse_multipart-method可能就是您所需要的
gm(req.files['profile-picture']['path'], 'img.jpg')
  .resize("100^", "100^")
  .gravity('Center')
  .crop(100, 100)
  .stream(function (err, stdout, stderr) {
     // do whatever you want with your output stream (stdout) here
  });