Node.js GraphicsMagick:toBuffer()流产生空缓冲区

Node.js GraphicsMagick:toBuffer()流产生空缓冲区,node.js,imagemagick,graphicsmagick,Node.js,Imagemagick,Graphicsmagick,我尝试将文件读入缓冲区,调整其大小,然后使用以下示例代码将其写入磁盘: function processImage(data) { gm(data, 'test.jpg') .resize('300x300') .background('white') .flatten() .setFormat('jpg') .toBuffer(function(err, buffer) { if (err) { throw err; } else {

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

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);
    }
  });
}
然而,这会产生一个错误:流产生空缓冲区。我玩过,用过imageMagick和graphicsMagick,还是一样

如果我替换
toBuffer(…


write('asd.jpg',函数(err).

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

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

setFormat('jpg')

导致问题。将其更改为

setFormat('jpeg')
解决了这个问题。

在我的例子中面临着同样的问题:安装graphicsmagick二进制文件

sudo-apt-get-install-graphicsmagick

流产生空缓冲区

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

  • 缺少安装:您没有正确安装graphicsmagick或imagemagick。请确保您同时安装了和
  • 无效参数:删除所有参数,直到其正常工作。jpg而不是jpeg是常见错误
  • 错误的库您使用了graphicmagick,但希望使用imagemagick(例如用于webp转换)。添加imagemagick配置:

  • const gm=require('gm')。子类({imageMagick:true});
    我也偶然发现了这个错误。对我来说,解决方案是将允许的内存从128Mb增加到256Mb。我注意到要成功,这个过程需要137Mb。

    这里也一样。
    brew在Mac上安装graphicsmagick
    (如果你已经安装了自制软件)也可以将扩展名添加为参数。toBuffer('jpeg',(错误,缓冲区)=>为了避免setFormat行。丢失的安装点为我解决了这一问题-我没有阅读自述文件,也没有意识到还必须单独安装GraphicsMagick。谢谢!你是如何做到的?这是节点进程还是imagemagick进程?这是lambda进程本身。