【发布时间】:2014-09-16 16:10:42
【问题描述】:
我正在尝试在节点中使用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 问题,看起来非常相似,但我不知道如何将其转换为我的情况。
有人可以解释我如何解决这个问题以及我做错了什么吗?
【问题讨论】:
-
不,我一直想再看看这个,因为它是一个副项目,这个周末会试着看看,看看我能不能解决它。
-
我在 OSX Mavericks 上安装 Cairo 时也遇到了问题,但最终以某种方式安装了它。然后,当我尝试在 Node.js 中的 Canvas 上绘制图像(context.drawImage)时,出现此错误“给定的图像尚未完成加载”。图像是使用请求库从 url 动态加载的,这在某种程度上导致了错误。由于某种原因,加载事件也没有触发。我结束了:使用请求从 url 加载图像,将其保存在磁盘上,从磁盘加载,在画布上绘制。太麻烦了。
标签: javascript node.js fs node-canvas resemblejs