2

我有一个 PNG 图像,有两种颜色(例如:红色和蓝色),使用 javascript 或 html5 是否可以将红色变为黄色,将蓝色变为绿色或其他?

4

2 回答 2

4

我为演示创建了一个小提琴:http: //jsfiddle.net/tyduD/1/

实际上,您可以更改每种颜色,但首先您需要获取三个主要颜色通道中每个像素的像素值(加上 alpha 通道,但这不是那么重要,但是您需要在循环数据时考虑频道)。RGB所有三个颜色分量 ( )都有单独的数据通道。

首先,您需要获取对画布上下文的引用,然后将 data 属性分配给将存储像素颜色值的像素数组:

var imageData = context.getImageData(0, 0, width, height);
var data = imageData.data;

使用双循环,您可以遍历颜色通道,并在此处进行像素操作。

for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
        var index = (x + width * y) * 4;
        data[index+0] = data[index+2];
        data[index+1] = 255 - data[index+1];
        data[index+2] = 255 - data[index-1];

    }
}

这是处理画布和像素操作的绝佳资源: http ://dev.opera.com/articles/view/html-5-canvas-the-basics/#pixelbasedmanipulation

于 2012-10-24T19:13:00.647 回答
1

是的,你可以这么做。

首先,您必须获取图像的 imageData :

var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var img = document.getElementById('myimg');
context.drawImage(img, 0, 0 );
var myData = context.getImageData(0, 0, img.width, img.height);

然后,您只需更改图像中每个myData[i](红色)和myData[i+2](蓝色)的值i

最后,您使用 .将 imageData 放回画布中 context.putImageData

请参阅此参考:使用画布进行像素操作

于 2012-10-24T15:27:17.107 回答