1

node js resize and save image from remote server.

Hi, How can I resize image without to save locally and then to save it. when I run bellow code, I get error: "Error: Input buffer contains unsupported image format" code:

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

  });      
});
}
Michael Fedorov
  • 81
  • 2
  • 10

2 Answers2

3

I found resolving for my question:

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);
Michael Fedorov
  • 81
  • 2
  • 10
0

If you can make sure that https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png returns the image, you can try to pipe the response directly to sharp rather than converting response to base64 format & processing.

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

Update:

Removed .toFile('test.jpg'); part

explorer
  • 944
  • 8
  • 18
  • thanks for your answer, I resolve my problem, code: 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); – Michael Fedorov Aug 09 '17 at 21:37
  • @MichaelFedorov, Remove `.toFile('test.jpg', (err, info) => { console.log('err: ', err); console.log('info: ', info); })`. That is not necessary, if you are only going to use pipe. – explorer Aug 10 '17 at 05:39