1

节点 js 调整大小并从远程服务器保存图像。

嗨,我如何调整图像大小而不保存在本地然后保存。当我运行以下代码时,出现错误:“错误:输入缓冲区包含不支持的图像格式”代码:

var fs = require('fs');
var request = require('request');
var sharp = require('sharp');

function getImage()
{
request('https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', function (err, res, body) {

var binary = Buffer.from(body.toString(), 'base64');   

sharp(binary).resize(198, 110).toFile('test.jpg', (err, info ) => 
  { 
      console.log('err: ', err);
      console.log('info: ', info);

  });      
});
}
4

2 回答 2

3

我发现解决了我的问题:

var resizer = sharp().resize(198, 110).toFile('test.jpg', (err, info) => { 
    console.log('err: ', err);
    console.log('info: ', info);
  });    
  request('https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png').pipe(resizer);
于 2017-08-09T21:39:36.980 回答
0

如果您可以确保https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png返回图像,您可以尝试将响应直接通过管道传输到 sharp 而不是将响应转换为 base64 格式和处理。

var resize = sharp(binary).resize(198, 110);
resize.on('error', function() {
  //handle error
});
resize.on('finish', function() {
  // done
});
request('https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png')
.pipe(process);

更新:

移除.toFile('test.jpg');的部分

于 2017-08-01T08:20:41.377 回答