我正在尝试使用Node.JS进行一些图像处理。我能够提取我需要的信息,但是我很难聚合多个图像的结果并将它们写入文件。
你会在底部附近看到2行:
console.log(palette);
output.push(palette);
我可以将palette
对象打印到控制台,但我无法将其推送到output
数组。我怀疑存在一些范围问题,但我似乎无法弄明白。
任何和所有的想法都非常感激。
fs = require('fs'),
getPixels = require("get-pixels");
var startTime = Date.now();
var imageDirectory = 'input';
var images = fs.readdirSync(imageDirectory);
console.log('Found ' + images.length + ' images.');
var output = [];
for (var image = 0; image < images.length; image++) {
getPixels(imageDirectory + '/' + images[image], function(err, pixels) {
if(err) {
console.log('Bad image path');
return
}
var palette = {
coloredPixels: 0,
hues: [],
image: images[image],
classification: false,
pixelCount: null
};
palette.pixelCount = pixels.shape[0] * pixels.shape[1] * pixels.shape[2];
for(var i=0; i < 256; i++) {
palette.hues[i] = 0;
}
for (var i=0; i < palette.pixelCount; i+=4) {
var rgb = [pixels.data[i], pixels.data[i+1], pixels.data[i+2]],
hsl = convert.rgb.hsl(rgb),
hue = hsl[0],
saturation = hsl[1];
if (saturation) {
palette.hues[hue]++;
palette.coloredPixels++;
}
}
console.log(palette);
output.push(palette);
})
}
var json = JSON.stringify(output, null, 2);
fs.writeFileSync('data.json', json);
// Calculate time spent
var endTime = Date.now();
console.log('Finished in ' + (endTime - startTime) / 1000 + ' seconds.');