我正在尝试在节点中使用Resemble.js。我在安装canvas / cairo时遇到了一些麻烦(与OS X Mavericks / XQuarts和Homebrew的混合有关)但最终到了那里。
相当远,但我已经碰到了这个。
function ImageSimilarityChecker(){
var resemble = require("resemble").resemble;
var fs = require("fs");
var util = require("util");
this.admitImage = function(imagePath)
{
fs.readFile(imagePath, function (err, fileData)
{
if (err) throw err;
else
{
var api = resemble(fileData).onComplete(function(data){
console.log(imagePath);
console.log(util.inspect(data));
});
}
});
}
}
new ImageSimilarityChecker().admitImage("./public/images/test.jpg");
导致此错误:
/Users/pcoghill/Projects/imgManip/auth/Servers/Farm/node_modules/resemble/lib/server.js:38
context.drawImage(hiddenImage, 0, 0, width, height);
^
Error: Image given has not completed loading
at load (/Users/pcoghill/Projects/imgManip/auth/Servers/Farm/node_modules/resemble/lib/server.js:38:15)
at module.exports.loadImageData (/Users/pcoghill/Projects/imgManip/auth/Servers/Farm/node_modules/resemble/lib/server.js:11:7)
at Object.onComplete (/Users/pcoghill/Projects/imgManip/auth/Servers/Farm/node_modules/resemble/resemble.js:508:5)
at /Users/pcoghill/Projects/imgManip/auth/Servers/Farm/resembleFile.js:14:39
at fs.js:271:14
at Object.oncomplete (fs.js:107:15)
我对节点很新,所以我看不到图像是如何加载的。它是一个本地文件,我正在读取完成的回调(或者我认为)。
在阅读jpg文件时,有点挖掘让我觉得这是画布中的一个问题,但我很难理解细节。我发现了this问题,看起来非常相似,但我看不出如何将其转换为我的情况。
有人可以解释我如何解决这个问题以及我做错了什么?
答案 0 :(得分:1)
您是否认为输入图像可能无效?经过一番挖掘后,我发现Node Canvas提供了一些非常误导性的错误消息,所以" Image还没有完成加载"可能会指向与图像文件相关的一系列错误。见https://github.com/Automattic/node-canvas/issues/486
我也坚持这个问题,所以会不断挖掘,如果我找到更多的话,会发布在这里。
编辑:您可以轻松安装Node和resemble
软件包,而无需安装JPG支持,但您不会被警告不支持JPG。不幸的是,添加JPG支持似乎是一个真正的痛点;见https://github.com/Automattic/node-canvas/issues/289
编辑2:刚刚找到一个Node-Canvas维基页面,专门指出了这个问题,并解释说这意味着缺少libjpeg
包。安装该软件包,然后重新编译Node-Canvas。请点击https://github.com/Automattic/node-canvas/wiki/installation---osx