HTML5 获取 Canvas 中的 alpha 像素数

标签 html canvas alpha alpha-transparency

我需要获取 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/

相关文章:

unity3d - 在 Unity 5 中正确渲染半透明球体

javascript - jQuery 在单击不同元素时调用相同的方法

javascript - 如何在 Html5、JavaScript、Css、Sass 中实现随机按钮颜色生成器

javascript - 如何克隆ImageData?

Android - 在转换的小部件中转换小部件以及由此产生的可用性问题

R:阿尔法!他们什么都不做!

php - 为什么这个 jQuery Replace() 不能在 <a 标签中工作,尽管我让它在 <p 标签中工作?

html - 更改删除线的垂直位置?

javascript - 方法比较 : EaselJS vs Multiple Canvases vs Hidden Canvas for interactiveness

ios - Swift UIView 背景颜色不透明度