我正在使用Node和Discord.js,为客户端编辑一个不和谐的机器人的源代码。因此,我无法提供完整的源文件,因为绝大部分代码不是我的,我宁愿不发布客户端的代码,以防万一--但我会发布我编写的与这个问题相关的代码片段。
任务包括让机器人生成一个形象,突出堡垒之夜游戏商店的“每日”项目。基本上,一个背景/模板图像,它将各种商店物品的图像叠加在模板图像中的框上。为了实现这一点,我一直试图将Jimp用于所涉及的图像操作/生成。然而,我遇到了一个奇怪的问题,只有当图片来自提供堡垒之夜条目pngs的API时,它才是一个问题。
这个API返回(除其他外)图像的URL,这是我最初尝试用Jimp读取的URL。(请注意,我实际上不能提供到API文档的任何链接,因为它处于封闭的beta版本中;我只能访问它,因为客户端给了我它们的标记,以便我可以处理它。) Jimp.read的意思是将它处理的img处理成一个Jimp映像--当我使用来自任何其他源的图像URL时,这似乎很好。但是,当从这个API向它提供URL时,它会导致一个异常,console.log是这样的:
AssertionError [ERR_ASSERTION]: zlib binding closed(后面是堆栈跟踪的其余部分,我将在下面完整地发布该跟踪)。
几个小时以来,我一直在努力打破这一局面,谷歌搜索,尝试创造解决办法,尝试其他的图书馆,但仍然无法获得任何东西。我试着将图像加载到一个缓冲区中,并将其输入Jimp.read,但却得到了相同的错误,逐字逐句。尝试使用new Jimp( ... )构造函数,但仍然没有工作。
我也一直在谷歌上寻找答案,但zlib binding closed错误似乎是非常罕见的,在任何情况下都很少提到它,也没有提到与Jimp相关的东西。在引号中搜索"zlib绑定已关闭“只为我提供了19个结果周期。如果没有别的,如果有人知道这个错误意味着什么,那将帮助我更好地知道在哪里去修复它。
我试着研究Jimp库的替代方案,但就JavaScript映像操作库而言,Canvas需要一个DOM对象,而Caman是我无法安装的。
我通常不会在StackOverflow上询问问题,但是我在任何地方都找不到这个问题的实例。可能的解决方案,甚至仅仅解释错误可能意味着什么将是非常有帮助的,同样,如果有人有一个好的替代Jimp的建议,在这种情况下,我无法修复。
(下面的代码片段/堆栈跟踪,我可能错过了一些重要的东西,因为我已经厌倦了,并且在做这件事的时候脑子都炸坏了,所以如果你还需要我做什么,请告诉我。)
网址尝试:
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计算机运行。
发布于 2019-08-20 15:50:09
我也有同样的问题。在我的例子中,我使用节点10.15.3进行测试,但是当我点击我的应用程序时,嵌入的节点版本在版本8上,因为ZLIB在该版本中不可用,所以断言失败。这就是我看到错误的原因。
https://stackoverflow.com/questions/52239249
复制相似问题