首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jimp.read创建错误- zlib绑定关闭

Jimp.read创建错误- zlib绑定关闭
EN

Stack Overflow用户
提问于 2018-09-08 20:41:29
回答 1查看 629关注 0票数 2

我正在使用Node和Discord.js,为客户端编辑一个不和谐的机器人的源代码。因此,我无法提供完整的源文件,因为绝大部分代码不是我的,我宁愿不发布客户端的代码,以防万一--但我会发布我编写的与这个问题相关的代码片段。

任务包括让机器人生成一个形象,突出堡垒之夜游戏商店的“每日”项目。基本上,一个背景/模板图像,它将各种商店物品的图像叠加在模板图像中的框上。为了实现这一点,我一直试图将Jimp用于所涉及的图像操作/生成。然而,我遇到了一个奇怪的问题,只有当图片来自提供堡垒之夜条目pngs的API时,它才是一个问题。

这个API返回(除其他外)图像的URL,这是我最初尝试用Jimp读取的URL。(请注意,我实际上不能提供到API文档的任何链接,因为它处于封闭的beta版本中;我只能访问它,因为客户端给了我它们的标记,以便我可以处理它。) Jimp.read的意思是将它处理的img处理成一个Jimp映像--当我使用来自任何其他源的图像URL时,这似乎很好。但是,当从这个API向它提供URL时,它会导致一个异常,console.log是这样的:

代码语言:javascript
运行
复制
AssertionError [ERR_ASSERTION]: zlib binding closed

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

几个小时以来,我一直在努力打破这一局面,谷歌搜索,尝试创造解决办法,尝试其他的图书馆,但仍然无法获得任何东西。我试着将图像加载到一个缓冲区中,并将其输入Jimp.read,但却得到了相同的错误,逐字逐句。尝试使用new Jimp( ... )构造函数,但仍然没有工作。

我也一直在谷歌上寻找答案,但zlib binding closed错误似乎是非常罕见的,在任何情况下都很少提到它,也没有提到与Jimp相关的东西。在引号中搜索"zlib绑定已关闭“只为我提供了19个结果周期。如果没有别的,如果有人知道这个错误意味着什么,那将帮助我更好地知道在哪里去修复它。

我试着研究Jimp库的替代方案,但就JavaScript映像操作库而言,Canvas需要一个DOM对象,而Caman是我无法安装的。

我通常不会在StackOverflow上询问问题,但是我在任何地方都找不到这个问题的实例。可能的解决方案,甚至仅仅解释错误可能意味着什么将是非常有帮助的,同样,如果有人有一个好的替代Jimp的建议,在这种情况下,我无法修复。

(下面的代码片段/堆栈跟踪,我可能错过了一些重要的东西,因为我已经厌倦了,并且在做这件事的时候脑子都炸坏了,所以如果你还需要我做什么,请告诉我。)

网址尝试:

代码语言:javascript
运行
复制
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);
    });

缓冲区尝试:

代码语言:javascript
运行
复制
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) 控制台输出:

代码语言:javascript
运行
复制
{ 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计算机运行。

EN

回答 1

Stack Overflow用户

发布于 2019-08-20 15:50:09

我也有同样的问题。在我的例子中,我使用节点10.15.3进行测试,但是当我点击我的应用程序时,嵌入的节点版本在版本8上,因为ZLIB在该版本中不可用,所以断言失败。这就是我看到错误的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52239249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档