20

I am trying to read a file into a buffer, resize it and then write it to disk using the following example code:

function processImage(data) {
gm(data, 'test.jpg')
    .resize('300x300')
  .background('white')
  .flatten()
  .setFormat('jpg')
  .toBuffer(function(err, buffer) {
    if (err) {
        throw err;
    } else {
        fs.writeFile('asd.jpg', buffer);
    }
  });
}

However, this generates an error Error: Stream yields empty buffer. I have played around, used imageMagick and graphicsMagick, still the same.

If i substitute
toBuffer(...
with
write('asd.jpg', function(err) ...

it actually writes a proper file.

EDIT While writing this question I found the solution, see reply

Bernhardt Scherer
  • 1,818
  • 3
  • 14
  • 21

5 Answers5

15

Was facing the same problem, in my case: install the graphicsmagick binary.

sudo apt-get install graphicsmagick

Edo
  • 3,311
  • 1
  • 24
  • 25
9

setFormat('jpg')
caused the problems. Changing it to
setFormat('jpeg') solved it.

Bernhardt Scherer
  • 1,818
  • 3
  • 14
  • 21
8

Stream yields empty buffer

This indicates a general error of graphiksmagick. Here are some probable causes:

  1. Missing Installation: you did not install graphicsmagick or imagemagick correctly. Make sure you installed both and
  2. Invalid Parameter: remove all parameters until it works. jpg instead of jpeg is a common mistake
  3. Wrong library You made use of graphicmagick but wanted to use imagemagick? (e.g. for webp conversion). Add imageMagick configuration:

const gm = require('gm').subClass({imageMagick: true});

Feel free to add more ideas as comment.

Simon Fakir
  • 1,712
  • 19
  • 20
  • The Missing Installation point solved it for me—I didn't read the ReadMe and didn't realise that you had to also have GraphicsMagick installed separately. Thanks! – Steve Harrison May 02 '18 at 08:50
4

I also stumbled upon this error. For me the solution was to increase the allowed memory from 128Mb to 256Mb. I noticed the process needed 137Mb in order to succeed.

Daniel Lidström
  • 9,930
  • 1
  • 27
  • 35
0

Error: Stream yields empty buffer

For me the solution of the error was to install both graphicsmagick and imagemagick.

Maybe it is because I use the app in node-alpine container and I want to use only graphicsmagick functionality of gm.

Jan
  • 1
  • 1