Как уже упоминалось, подсчет отдельных непрозрачных пикселей - единственный способ сделать это.
Следующее, вероятно, быстрее, чем псевдокод, показанный в другом ответе.Несмотря на 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);
}