GraphicsMagick:toBuffer()Stream产生空缓冲区

Ber*_*rer 18 imagemagick node.js graphicsmagick

我试图将文件读入缓冲区,调整大小,然后使用以下示例代码将其写入磁盘:

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);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

但是,这会产生错误Error: Stream yields empty buffer.我玩过,使用过imageMagick和graphicsMagick,还是一样的.

如果我代替
toBuffer(...

write('asd.jpg', function(err) ...

它实际上写了一个合适的文件.

编辑在写这个问题时,我找到了解决方案,请参阅回复

Edo*_*Edo 12

面对同样的问题,在我的情况下:安装graphicsmagick二进制文件.

sudo apt-get install graphicsmagick

  • 同样在这里.在Mac上"brew install graphicsmagick"(如果你已经安装了Homebrew) (4认同)

Ber*_*rer 9

setFormat('jpg')
造成了这些问题.改变它来
setFormat('jpeg')解决它.


Sim*_*kir 8

流产生空缓冲区

这表示graphiksmagick的一般错误.以下是一些可能的原因:

  1. 缺少安装:您没有正确安装graphicsmagick或imagemagick.确保你安装了两个和
  2. 无效参数:删除所有参数,直到它工作.jpg而不是jpeg是一个常见的错误
  3. 错误的图书馆您使用了graphicmagick但想使用imagemagick?(例如,用于webp转换).添加imageMagick配置:

const gm = require('gm').subClass({imageMagick: true});
Run Code Online (Sandbox Code Playgroud)

随意添加更多想法作为评论.