Процесс чтения изображения занимает слишком много времени.
Для этого я использую модуль jimp.
var Jimp = require("jimp");
var fs =require('fs');
fs.readdir("./unZipped/", function(err, filenames) {
if (err) {
onError(err);
return;
}
//filenames.forEach(function(filename) {
for (var i = 0; i < filenames.length; i++){
var filename = filenames[i];
if (filename.indexOf('.png')>-1){
processimage(filename)
}
}
});
var processimage=function (imageFile){
Jimp.read('./unZipped/'+imageFile, (err, lenna) => {
console.log("in read");
if (err) throw err;
var iwidth = lenna.bitmap.width ;
var iheight = lenna.bitmap.height ;
//console.log("image width: "+ iwidth);
//console.log("image height: "+ iheight);
var darkcount =0;
for (var i =0; i<iwidth;i++){
for (var j=0; j<iheight;j++){
var col = lenna.getPixelColor(i, j);
//console.log ("i "+ i + " j " +j+ "col: "+ col);
if (col===255)
{
darkcount++;
}
}
}
var totalSize=i*j
var percentlight2Dark= (totalSize-darkcount)/totalSize;
console.log (imageFile+" darkcount "+ darkcount + " total count " +i*j+ " %age light dark : "+percentlight2Dark*100);
});
}
Ожидаемое поведение
Он считывает папку с несколькими изображениями (706), вычисляет темные и белые пиксели и преобразует количество белых пикселей в процент.
Текущее поведение
Код делает то, что мне нужно, кроме очень медленного. Я заметил, что он пытается открыть все изображения одновременно, а затем приступить к расчетам. У меня есть 8 Гб оперативной памяти ноутбука. Пока код считывает изображения, оперативная память достигает пика до 6 ГБ, и программа останавливается примерно на 10 минут, прежде чем приступить к вычислениям.
Может быть, кто-нибудь может помочь мне прочитать изображения по одному, выполнить расчеты и продолжить работу с остальными изображениями в папке, чтобы они не заполняли память.
Спасибо