Canvas createImageData
createImageData() 方法创建新的空白 ImageData 对象。新对象的默认像素值 transparent black。
对于 ImageData 对象中的每个像素,都存在着四方面的信息,即 RGBA 值:
- R - 红色 (0-255)
- G - 绿色 (0-255)
- B - 蓝色 (0-255)
- A - alpha 通道 (0-255; 0 是透明的,255 是完全可见的)
因此 ,transparent black 表示 (0,0,0,0)。
color/alpha 以数组形式存在,并且既然数组包含了每个像素的四条信息,数组的大小是 ImageData 对象的四倍。(获得数组大小有更简单的办法,就是使用 ImageDataObject.data.length)
ImageDataObject.data.length = ImageDataObject.width*ImageDataObject.height*4;
包含 color/alpha 信息的数组存储于 ImageData 对象的 data 属性中。
提示:在操作完成数组中的 color/alpha 信息之后,您可以使用 putImageData() 方法将图像数据拷贝回画布上。
有两个版本的 createImageData() 方法:
1. 以指定的尺寸(以像素计)创建新的 ImageData 对象:
var imgData=context.createImageData(width,height);
2. 创建与指定的另一个 ImageData 对象尺寸相同的新 ImageData 对象(不会复制图像数据):
var imgData=context.createImageData(imageData);
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>createImageData</title> </head> <body> <canvas id='myCanvas' width='800' height='400'> your browser does not support canvas </canvas> <script type="text/javascript"> var c = document.getElementById('myCanvas'); var ctx = c.getContext('2d'); var img = new Image(); img.src = 'face.jpg'; img.onload = function() { // 从10,10坐标开始绘制整个图片 ctx.drawImage(img, 10, 10); var imgData = ctx.getImageData(50, 50, 200, 200); var imgData01 = ctx.createImageData(imgData); for (var i = 0; i < imgData01.width * imgData01.height * 4; i += 4) { imgData01.data[i + 0] = 255; imgData01.data[i + 1] = 0; imgData01.data[i + 2] = 0; imgData01.data[i + 3] = 255; } ctx.putImageData(imgData01, 10, 260); var imgData02 = ctx.createImageData(100, 100); for (i = 0; i < imgData02.width * imgData02.height * 4; i += 4) { imgData02.data[i + 0] = 255; imgData02.data[i + 1] = 0; imgData02.data[i + 2] = 0; imgData02.data[i + 3] = 155; } ctx.putImageData(imgData02, 220, 260); }; </script> </body> </html>