节点Canvas / Resemble.js错误:给定的图像在加载时未完成加载

时间:2014-07-24 22:20:07

标签: javascript node.js fs node-canvas resemblejs

我正在尝试在节点中使用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问题,看起来非常相似,但我看不出如何将其转换为我的情况。

有人可以解释我如何解决这个问题以及我做错了什么?

1 个答案:

答案 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

了解更多信息