我有一个脚本拍摄照片并创建黑白R,G和B通道。我想知道有多少频道有些东西(黑色=没有颜色,白色=颜色数据)。
它的工作原理是遍历每个像素并将数据保存在3个不同的画布元素中。每个人都有不同的渠道。
效果很好但是当我只给出红色和蓝色图片时,绿色通道(显然)是完全黑色的。
所以我的问题是,如何检查画布是否完全是黑色的?我想避免遍历每个频道中的每个像素,看看它是否全黑。
欢呼声
答案 0 :(得分:3)
好的我已经测试了一些东西,我能想出的最简单的解决方案是创建一个1x1的屏幕外画布,然后绘制你想要检查数据的图像或原始画布,缩小到1像素并检查它(我还添加了基本缓存)。
这不是一个精确的检查,结果取决于像素数据在原始图像中的分布情况,正如GameAlchemist所指出的,如果你想要准确,如果检查结果为0,你可以循环遍历所有像素。结果
function quickCheck(img){
var i = arguments.callee; //caching the canvas&context in the function
if(!i.canvas){i.canvas = document.createElement("canvas")}
if(!i.ctx) {i.ctx = i.canvas.getContext("2d")}
i.canvas.width=i.canvas.height = 1;
i.ctx.drawImage(img,0,0,1,1);
var result = i.ctx.getImageData(0,0,1,1);
return result.data[0]+result.data[1]+result.data[2]+result.data[3];
}
答案 1 :(得分:0)
你必须迭代画布的像素数据 - 没有神奇的方法可以避免这种情况。
迭代2张图像的性能成本微不足道(2幅图像=您的正面图像和背面图像)。
[访问提问者网站后删除了必要的部分答案]