Node.js - Изтегляне и обработка на изображение с „заявка“ и „възел-платно“

Използвам заявката и node-canvas модули, за да опитате да изтеглите и обработите изображение:

var request = require('request');
var Image = require('canvas').Image;

var url = 'http://farm8.staticflickr.com/7333/11286633486_070f0d33bc_n.jpg';

request.get({ url: url, encoding: null }, function(err, res, body) {
    if (err) throw err;

    var image = new Image();

    image.onerror = function() {
        console.error(arguments);
    };

    image.onload = function() {
        console.log('loaded image');
    };

    image.src = new Buffer(body, 'binary');
});

Получавам грешката „Error: error while reading from input stream“ (събитието onerror се задейства). Но когато натисна горния URL адрес на изображението в браузър, той показва изображението според очакванията.

какво правя грешно


person Sunday Ironfoot    schedule 30.01.2014    source източник
comment
Работи както се очаква за мен, изстрелвайки събитие при зареждане. Каква версия на възел, заявка и платно използвате?   -  person mutil    schedule 30.01.2014
comment
Използвам Node v0.10.21. Инсталирах заявка и платно чрез npm, така че предполагам, че те са най-новата версия. Работя с OSX 10.9 (Mavericks), следвах инструкциите за инсталиране на Pixman и Cairo.   -  person Sunday Ironfoot    schedule 30.01.2014
comment
canvas е v1.1.3. заявката е 2.33.0   -  person Sunday Ironfoot    schedule 30.01.2014
comment
Можете ли да потвърдите, че тялото наистина е буфер? Виждам, че само ако премахна encoding: null, получавам грешка. Освен това не се сещам за нищо друго. Току-що копирах и поставих вашия код, инсталирах най-новото платно и заявка на машина с Linux с възел v0.10.15 и той проработи.   -  person mutil    schedule 30.01.2014
comment
Да, определено е буфер. Ако стартирам console.log(body), терминалът извежда буфер [ O1 12 B2 G4 и т.н.   -  person Sunday Ironfoot    schedule 30.01.2014


Отговори (1)


Поправих го!

Изглежда имах повредена инсталация на pixman и/или cairo на OSX (зависимости на node-canvas), вероятно защото се опитах да ги инсталирам чрез homebrew.

Решението беше да се отървете от тях от homebrew, като използвате:

brew uninstall cairo
brew uninstall pixman

... след това стартирайте:

brew doctor

..за да проверите за повредени символни връзки и т.н., свързани с cairo и pixman. След това трябва ръчно да изтриете всички cairo & pixman bins/libs/symlinks и т.н. с помощта на Finder.

След това следвайте инструкциите за инсталиране на node-canvas, за да инсталирате отново cairo и pixman на OSX.

И накрая, вероятно ще трябва да преинсталирате node-canvas чрез npm, така че отворете вашата папка „node_modules“ и изтрийте директорията „canvas“. След това стартирайте:

npm install canvas
person Sunday Ironfoot    schedule 30.01.2014