GraphicsMagick:toBuffer()流生成空缓冲区

20

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

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

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

编辑 在撰写本问题时,我已找到解决方案,请参见回复。

5个回答

15

我遇到了同样的问题,在我的情况下是:安装GraphicsMagick二进制文件。

sudo apt-get install graphicsmagick


4
一样。在Mac上(如果你已经安装了Homebrew),可以使用命令brew install graphicsmagick来安装GraphicsMagick。 - jamie-wilson

9

setFormat('jpg')导致问题。更改为setFormat('jpeg')解决了问题。


1
可以将扩展名作为参数添加到.toBuffer('jpeg', (error, buffer) =>中,以避免使用setFormat行。 - Ian Warner

8

流产生了空缓冲区

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

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

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

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


安装GraphicsMagick后问题得到解决——我没有阅读ReadMe,也没有意识到你需要单独安装GraphicsMagick。谢谢! - Steve Harrison

4

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


你是怎么做到的?这是节点进程还是imagemagick进程? - Sam-Graham
这是 lambda 进程本身。 - Daniel Lidström

1
错误:流产生空缓冲区。
对我来说,解决此错误的方法是安装 graphicsmagickimagemagick 两者都
也许是因为我在 node-alpine 容器中使用该应用程序,并且想要仅使用 gmgraphicsmagick 功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接