我需要获取 Canvas 中透明/不透明像素的比例。执行此操作的最佳方法是什么?
更新: 基于以下帖子,我最终编写了这段代码:
function getNumberOfAlphaPixels(can) {
var step = 200; //We skip 200 pixels to make it work faster
var ctx = can.getContext('2d');
var imgd = ctx.getImageData(0, 0, can.width, can.height);
var pix = imgd.data;
var alphaPixelsNum = 0;
for (var i = 0; i < pix.length; i += 4*step) {
if (pix[i+3] == 0) {
alphaPixelsNum += step;
}
}
return alphaPixelsNum;
}
最佳答案
如前所述,计算单个不透明像素是唯一的方法。
以下可能比其他答案中显示的伪代码更快。 尽管有 JIT 跟踪/代码分析,但它确实有助于加快阐明基本低级操作的速度。
function alphaRatio(ctx) {
var alphaPixels = 0;
var data = ctx.getImageData(0,0, ctx.canvas.width,ctx.canvas.height).data;
for(var i=3; i<data.length; i+=4) {
if(data[i] > 0) alphaPixels++;
}
return alphaPixels / (ctx.canvas.width * ctx.canvas.height);
}
关于HTML5 获取 Canvas 中的 alpha 像素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087819/