【问题标题】:Jimp.read creating error - zlib binding closedJimp.read 创建错误 - zlib 绑定​​关闭
【发布时间】:2019-08-20 23:50:09
【问题描述】:

我正在使用 Node 和 Discord.js,为客户编辑 Discord 机器人的源代码。因此,我将无法提供完整的源文件,因为绝大多数代码不是我的,我宁愿不发布客户的代码以防万一——但我会发布编写的 sn-ps由我提出的与问题相关的内容。

任务包括让机器人生成一张图像,突出显示 Fortnite 游戏商店中的“日常”物品。基本上,一个背景/模板图像,它将各种商店商品的图像叠加到模板图像中的框上。为了实现这一点,我一直在尝试使用Jimp 进行所涉及的图像处理/生成。但是,我遇到了一个奇怪的问题,只有当图像来自提供 Fortnite 项目 pngs 的 API 时才会出现问题。

此 API 返回(除其他外)图像的 URL,这是我最初尝试使用 Jimp 读取的 URL。 (请注意,我实际上无法提供任何指向 API 文档的链接,因为它处于封闭测试版中;我只能访问它,因为客户给了我他们的令牌,所以我可以处理它。)Jimp.read 旨在采取它处理成 Jimp 图像的 img URL - 当我使用 任何其他来源 的图像 URL 时,这似乎工作正常。但是,当从这个 API 向它提供 URL 时,它会导致 console.logs 的异常:

AssertionError [ERR_ASSERTION]: zlib binding closed

(接下来是堆栈跟踪的其余部分,我将在下面完整发布)。

我已经在墙上撞了几个小时,现在试图突破这一点,谷歌搜索,尝试创建解决方法,尝试替代库,但仍然无法到达任何地方。我尝试将图像加载到缓冲区并将 that 输入到Jimp.read,但得到完全相同的错误,逐字逐句。尝试使用 new Jimp( ... ) 构造函数,但仍然没有工作。

我也一直在谷歌搜索试图找到答案,但 zlib binding closed 错误似乎非常不常见,并且在任何中很少提及它上下文,并且我找不到与 Jimp 相关的任何提及。在引号内搜索“zlib 绑定​​已关闭”只为我提供了 19 个结果期。如果不出意外,如果有人知道这个错误意味着什么,那将帮助我更好地了解在哪里修复它。

我曾尝试寻找 Jimp 库的替代方案,但就 JavaScript 图像处理库而言,Canvas API 需要一个 DOM 对象,而我无法安装 Caman。

我一般不会在 StackOverflow 上提问,但我在任何地方都找不到这个问题的实例。可能的解决方案,甚至只是解释错误可能意味着什么,都会非常有帮助,如果在我无法解决这个问题的情况下,如果有人对 Jimp 的替代方案提出建议。

(下面的代码 sn-ps/stack traces,我可能错过了一些重要的东西,因为我很累而且完全脑力劳动,所以如果你需要我的其他东西,请告诉我)

网址尝试:

Jimp.read("https://image.fnbr.co/outfit/5b90ec38262b40c2dcc98379/icon.png")
    .then(image => {
        message.channel.send("jimp", {
            file: image
        });
    })
    .catch(err => {
        console.log(err);
    });") // Should just return a URL string
    .then(image => {
        message.channel.send("jimp", {
            file: image
        });
    })
    .catch(err => {
        console.log(err);
    });

缓冲尝试:

request.get("https://image.fnbr.co/outfit/5b90ec38262b40c2dcc98379/icon.png", function(error, response, body) {
    if (!error && response.statusCode == 200) {
        var buffer = new Buffer(body);
        Jimp.read(buffer)
            .then(image => {
                message.channel.send("jimp", {
                    file: image
                });
            })
            .catch(err => {
                console.log(err);
            });
    } else {
        console.log("8(");
    }
});

^ 最终,上面将根据商店的“每日”结果获取图像 URL,但现在我只是想让它们在硬编码的 URL 上工作。该 API 中的所有 URL 都遵循与此处使用的格式相同的格式。

完整的console.log(err)控制台输出:

{ AssertionError [ERR_ASSERTION]: zlib binding closed
    at Inflate._processChunk (C:\Users\(user)\Documents\dev\(project)\node_modules\pngjs\lib\sync-inflate.js:108:3)
    at zlibBufferSync (C:\Users\(user)\Documents\dev\(project)\node_modules\pngjs\lib\sync-inflate.js:151:17)
    at inflateSync (C:\Users\(user)\Documents\dev\(project)\node_modules\pngjs\lib\sync-inflate.js:155:10)
    at module.exports (C:\Users\(user)\Documents\dev\(project)\node_modules\pngjs\lib\parser-sync.js:79:20)
    at Object.exports.read [as image/png] (C:\Users\(user)\Documents\dev\(project)\node_modules\pngjs\lib\png-sync.js:10:10)
    at Jimp.parseBitmap (C:\Users\(user)\Documents\dev\(project)\node_modules\@jimp\core\dist\utils\image-bitmap.js:117:53)
    at new Jimp (C:\Users\(user)\Documents\dev\(project)\node_modules\@jimp\core\dist\index.js:425:32)
    at _construct (C:\Users\(user)\Documents\dev\(project)\node_modules\@jimp\core\dist\index.js:100:393)
    at C:\Users\(user)\Documents\dev\(project)\node_modules\@jimp\core\dist\index.js:885:5
    at Promise (<anonymous>)
  generatedMessage: false,
  name: 'AssertionError [ERR_ASSERTION]',
  code: 'ERR_ASSERTION',
  actual: undefined,
  expected: true,
  operator: '==',
  methodName: 'constructor' }

使用 npm 管理包,在 Windows 计算机上运行。

【问题讨论】:

  • idownvotedbecau.se/toomuchinfo "你的问题里面有大量的文字。你真正的问题只是几个说明,而且大部分的文字都与你的问题的解决完全无关。它只会作为噪音,让那些试图回答你问题的人更难。”
  • 您的问题与使用 PNG 有关,我也有同样的问题。我尝试使用 JPEG,它工作正常。您是否偶然找到了 PNG 案例的解决方案?

标签: javascript image-manipulation discord.js


【解决方案1】:

我遇到了同样的问题。 在我的情况下,我正在使用节点 10.15.3 进行测试,但是当我 pkged 我的应用程序时,嵌入的节点版本在版本 8 上。由于 ZLIB 在该版本中不可用,因此断言失败。这就是我看到错误的原因。

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多