Вопрос: 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) ...

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

РЕДАКТИРОВАТЬ  При написании этого вопроса я нашел решение, см. Ответ


15


источник


Ответы:


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

sudo apt-get install graphicsmagick


11



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


9



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

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

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

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

Не стесняйтесь добавлять больше идей в качестве комментариев.


4



Я также наткнулся на эту ошибку. Для меня решение заключалось в том, чтобы увеличить разрешенную память с 128 Мб до 256 МБ. Я заметил, что для достижения успеха нужен 137Mb.


1