您知道任何好的解决方案(也可以基于 Canvas ),使开发人员能够在非透明区域(如蒙版)中更改 png 图像的颜色(填充十六进制颜色)?我需要会改变颜色(或背景图像)的透明区域,这就是为什么它必须保持不变。

最佳答案

要执行您想要的操作,您需要使用 getImageDataputImageData 检查 mdn for an explanation on pixel manipulation

这是一些示例代码

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:100,b:200};

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

        if(r == 216 && g == 6 && b == 6){
            // Change the red to whatever.
            pix[i] = newColor.r;
            pix[i+1] = newColor.g;
            pix[i+2] = newColor.b;
        }
}

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

Example demo

使用上面的代码,您可以使用以下代码检查紫红色
if(r == 255 && g == 0 && b == 255)
然后只需将 newColor 更改为替换颜色。

关于javascript - 如果不透明,则为 PNG 文件区域着色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10878477/

10-16 11:17