GraphicsMagick: toBuffer() Поток дает пустой буфер

Я пытаюсь прочитать файл в буфер, изменить его размер, а затем записать его на диск, используя следующий пример кода:

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

Однако это порождает ошибку Error: Stream yields empty buffer. Я играл, использовал imageMagick и graphicsMagick, все тот же.

Если я заменим toBuffer(...
с
write('asd.jpg', function(err) ...

он фактически пишет правильный файл.

EDIT При написании этого вопроса я нашел решение, см. ответ

Ответ 1

setFormat('jpg')
вызвало проблемы. Изменение его на
setFormat('jpeg') решил.

Ответ 2

У меня была одна и та же проблема: в моем случае: установить графический файл.

sudo apt-get install graphicsmagick

Ответ 3

Поток дает пустой буфер

Это указывает на общую ошибку graphiksmagick. Вот некоторые возможные причины:

  • Отсутствует установка: вы не установили графику или графику правильно. Убедитесь, что вы установили оба и
  • Недопустимый параметр: удалите все параметры, пока они не будут работать. jpg вместо jpeg - распространенная ошибка.
  • Неверная библиотека. Вы использовали графический инструмент, но хотели использовать imagemagick? (например, для преобразования webp). Добавить конфигурацию imageMagick:

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