使用html5 canvas操作图像像素
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:admin 阅读 277
使用canvas可以进行一些简单的图像处理,一般需要加载图片,然后再进行相应的处理。canvas提供了诸如:getImageData,putImageData等方法。大致的过程是这样:varcanv

    使用canvas可以进行一些简单的图像处理,一般需要加载图片,然后再进行相应的处理。

    canvas提供了诸如:getImageData, putImageData等方法。

    大致的过程是这样:

var canvas = document.getElementById('c'),
ctx = canvas && canvas.getContext && canvas.getContext('2d'),
imageData, pixelArray;

var img = new Image();
img.onload = function() {
if (!ctx) return;

ctx.drawImge(this, 0, 0);

imageData = ctx.getImageData(0, 0, this.width, this.height);
pixelArray = imageData.data;

for (var i=0, len=pixelArray.length; i<len; i+=4) {
var r = pixelArray[i],
g = pixelArray[i+1],
b = pixelArray[i+2],
a = pixelArray[i + 3];

//进行相应处理
pixelArray[i] = 255 - r;
        pixelArray[i+1] = 255 - g;
pixelArray[i+2] = 255 - b;
}

ctx.putImageData(imageData, 0, 0);
};
img.src = 'image.jpg';

    imageData.data返回的像素数组是一维的数组,数组里的每一个元素是1byte(0~255),4个元素组成1个像素(按顺序,分别是该像素的红、绿、蓝、alpha通道)。所以上面的代码i每次加4。

    但是,我们知道,图片其实是一个2维数组,我们更希望的处理方式是通过图像的x,y坐标来定位像素。这可以这样来做:

var getPixel = function(x, y) {
var s = x * (width * 4) + (y * 4);

var r = pixelArray[s],
g = pixelArray[s + 1],
b = pixelArray[s + 2],
a = pixelArray[s + 3];

return [r, g, b, a];
};

    有了这一层封装,就比较好进行一些处理了。

    自己封装了一个脚本,能够像这样来处理图像:

pixelIt('container')
.height(400)
.width(400)
.load('image.jpg')
.process(function(image) {
image.patch(0, 0, image.width, image.height, function(r, g, b, a) {
var gray = image.util.rgb2gray(r, g, b);
return [gray, gray, gray, a - 100];
});
});

    源代码,请猛击:https://github.com/KohPoll/PixelIt

    更多canvas操作像素相关,请猛击:https://developer.mozilla.org/En/HTML/Canvas/Pixel_manipulation_with_canvas

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2