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

GraphicsMagick: toBuffer() Stream yields empty buffer

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

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

它实际上写了一个正确的文件。

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

setFormat('jpg')
造成了问题。将其更改为
setFormat('jpeg') 解决了。

我遇到了同样的问题:安装 graphicsmagick 二进制文件。

sudo apt-get install graphicsmagick

Stream yields empty buffer

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

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

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

欢迎在评论中添加更多想法。

我也偶然发现了这个错误。对我来说,解决方案是将允许的内存从 128Mb 增加到 256Mb。我注意到该进程需要 137Mb 才能成功。

Error: Stream yields empty buffer

对我来说,错误的解决方案是同时安装graphicsmagickimagemagick

可能是因为我在 node-alpine 容器中使用应用程序,我只想使用 gmgraphicsmagick 功能。