我正在使用JavaScript进行图像处理项目,在这个项目中需要迭代每个像素并执行其他处理以达到我的目标。我使用canvas获取图像像素数据数组。对于小型图像,例如500x300像素,它可以正常工作且所花费时间可接受。但是对于大型图像,例如3000x3000像素,则迭代过程成为瓶颈并且需要很长时间,例如10-12秒。
因此,是否有任何方法或技巧可以用来减少迭代步骤中使用的时间?
我想尝试使用平行Web Worker(假设有4个)来迭代图像数据的相等部分:(例如
我怀疑这种方法会更加高效,因为JavaScript是单线程的。
因此,是否有任何方法或技巧可以用来减少迭代步骤中使用的时间?
我想尝试使用平行Web Worker(假设有4个)来迭代图像数据的相等部分:(例如
0-[len/4]
, [len/4]+1-[len/2]
, [len/2]+1 - [len*3/4]
, [len*3/4]+1 - len
)其中len
是图像数据数组的大小。我怀疑这种方法会更加高效,因为JavaScript是单线程的。
function rgb2grey(pix,offset){
return (0.2989*pix[offset] + 0.5870*pix[offset+1] +
0.1140*pix[offset+2]);
}
function imgcompare(fileData1,fileData2,targetpix){
var len = pix.length;
for (var j = 0; j <len; j+=4) {
var grey1 = rgb2grey(fileData1,j);
var grey2 = rgb2grey(fileData2,j);
if(grey1!=grey2){
targetpix[j] = 255;
targetpix[j+1] = targetpix[j+2] = 0;
}
else{
targetpix[j] = fileData1[j];
targetpix[j+1] = fileData1[j+1];
targetpix[j+2] = fileData1[j+2];
}
targetpix[j+3] = fileData1[j+3];
}
}
for (var j=0, jmax=pix.length ; j<jmax ; j+=4) { ... }
- Sumi Straessle