Jd veya Canvas kullanarak node.js'de resim alma işlemim var. İndirme işlemi sırasında, arka uçta Vibrant.js kullanarak renk örnekleri çıkarmak istiyorum. Aşağıdaki kodumun hiçbiri işe yaramıyor.jsdom veya Canvas node.js öğesini kullanarak Vibrant.js örneklerini alın
kullanma jsdom
const Vibrant = require('node-vibrant');
const request = require('request');
var jsdom = require("jsdom").jsdom;
var window = jsdom().defaultView;
var document = jsdom('<html><body></body></html>', {
features: {
FetchExternalResources : ['img']
}
});
var imgDom = document.createElement("img");
imgDom.onload = function() {
console.log('onload triggered');
// var imgData = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC';
// var imgData = imgDom.replace(/^data:image\/gif;base64,/, "")
// var binaryData = new Buffer(imageData, 'base64').toString('binary');
request.get(imgDom.src, function(err, res, body) {
console.log(body.length);
// Spit out a bunch of base64 code
let v = new Vibrant(new Buffer(body, 'binary').toString('base64'));
// Error image.load not found
// let v = new Vibrant(new Buffer(body, 'binary').toString('base64'), {ImageClass: window.Image});
// Error: Path must be a string without null bytes
// let v = new Vibrant(new Buffer(body, 'base64').toString('binary'));
// v.getPalette().then((palette) => console.log(palette));
var swatches = v.swatches();
console.log(JSON.stringify(swatches));
for (var swatch in swatches)
if (swatches.hasOwnProperty(swatch) && swatches[swatch])
console.log(swatch, swatches[swatch].getHex())
});
}
imgDom.src = 'https://unsplash.it/200';
// imgDom.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC';
kullanma Tuval
const Vibrant = require('node-vibrant');
const request = require('request');
const Canvas = require('canvas-prebuilt');
const Image = Canvas.Image;
var imgDom = new Image;
imgDom.onload = function() {
console.log('onload triggered');
let v = new Vibrant(imgDom, {ImageClass: Canvas.Image});
v.getPalette().then((palette) => console.log(palette));
};
request.get('https://unsplash.it/200', function(err, res, body) {
console.log(body.length);
imgDom.src = new Buffer(body);
// imgDom.src = new Buffer(body, 'binary').toString('base64');
// imgDom.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC';
});
Ben Vibrant.js URL'yi kullanabilirsiniz ama bu başka http GET kullanarak Bluebird ve ben ağı arama önlemek gerekir Tekrar yükle.
Bence Vibrant.js, Node.js.'deki Image nesnesini anlamak için zor bir zamana sahip.
Uygun Image sınıfını Vibrant.js'ye iletebilmem için buradaki geçici çözüm nedir?