javascript - 如何在 html5 和 javascript 中编辑像素并删除 Canvas 图像中的白色背景

标签 javascript html canvas

如果我加载图像,我如何遍历其所有像素并将白色像素(或我指定的任何颜色)变为透明?

我有一个关于如何做到这一点的想法,但循环过程应该像一个二维数组,所以它会涉及两个 for 循环。

我想我会从顶行的第一个像素开始,向右迭代,如果它是白色像素,那么我将它变成透明的,然后向右移动 1 个像素,如果它不是白色的,然后我停止。然后在同一行,我从最左边的像素开始,检查,如果是白色,我把它变成透明的,然后向左移动 1 个像素,等等......

然后我向下移动 1 行并重复整个过程..

这样我就不会删除实际图像中的任何白色像素。

最佳答案

使用 getImageDataputImageData 非常简单,请注意,图像越大,性能就会受到显着影响。您只需要确定当前像素是否为白色,然后将其 alpha 更改为 0。

Live Demo

var canvas = document.getElementById("canvas"),
    ctx = canvas.getContext("2d"),
    image = document.getElementById("testImage");

canvas.height = canvas.width = 135;
ctx.drawImage(image,0,0);

var imgd = ctx.getImageData(0, 0, 135, 135),
    pix = imgd.data,
    newColor = {r:0,g:0,b:0, a:0};

for (var i = 0, n = pix.length; i <n; i += 4) {
    var r = pix[i],
            g = pix[i+1],
            b = pix[i+2];

        // If its white then change it
        if(r == 255 && g == 255 && b == 255){ 
            // Change the white to whatever.
            pix[i] = newColor.r;
            pix[i+1] = newColor.g;
            pix[i+2] = newColor.b;
            pix[i+3] = newColor.a;
        }
}

ctx.putImageData(imgd, 0, 0);​

还询问是否可以使这些值有点模糊以供检查。很简单,只要检查它是否在一定范围内。下面将关闭白色变为纯白色透明。

 // If its white or close then change it
    if(r >=230 && g >= 230 && b >= 230){ 
        // Change the white to whatever.
        pix[i] = newColor.r;
        pix[i+1] = newColor.g;
        pix[i+2] = newColor.b;
        pix[i+3] = newColor.a;
    }

更多资源

关于javascript - 如何在 html5 和 javascript 中编辑像素并删除 Canvas 图像中的白色背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11472273/

相关文章:

html - 如何在 div 中安装响应式包装 Canvas signature_pad?

javascript - cavsTxt.measureText 根据字体系列和字体大小为文本提供不同的宽度

javascript - 实时显示所有当前访客光标

javascript - React-Redux 与 webpack 给出错误 Uncaught TypeError : Super expression must either be null or a function, not undefined

javascript - 将查询集列表传递给带有日期时间字段的 JavaScript 函数

javascript - Bootstrap Javascript 无法在实时网站上运行

javascript - 在 div 元素中调用 JQuery 函数

php - 关闭并重新打开后继续填写 HTML 表单

html - HTML 音频/视频有问题

c# - 在 WPF 中找不到附加属性