【问题标题】:GraphicsMagick: toBuffer() Stream yields empty bufferGraphicsMagick:toBuffer() 流产生空缓冲区
【发布时间】:2016-05-27 18:32:58
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js imagemagick graphicsmagick


    【解决方案1】:

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

    sudo apt-get install graphicsmagick

    【讨论】:

    • 这里也一样。 brew install graphicsmagick 在 Mac 上(如果你安装了 Homebrew)
    【解决方案2】:

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

    【讨论】:

    • 还可以添加扩展名作为参数 .toBuffer('jpeg', (error, buffer) => 避免 setFormat 行。
    【解决方案3】:

    流产生空缓冲区

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

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

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

    随时添加更多想法作为评论。

    【讨论】:

    • 缺少的安装点为我解决了这个问题——我没有阅读自述文件,也没有意识到您还必须单独安装 GraphicsMagick。谢谢!
    【解决方案4】:

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

    【讨论】:

    • 你是怎么做到的?这是节点进程还是 imagemagick 进程?
    • 这是 lambda 进程本身。
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 2016-01-20
    • 2016-06-22
    • 2011-03-21
    • 1970-01-01
    • 2021-09-27
    • 2011-11-14
    • 2021-10-06
    相关资源
    最近更新 更多