2020-9-4日:Canvas 2d上下文:图像数据getImageData();
- getImageData():
- 参数(4个): 取得其数据的画面区域的 x和 y坐标;该区域的像素宽度和高度;
- 作用:取得原始图像数据;
- 画布“干净”的情况下(即图像并非来自其他域),才可以取得图像数据。 【非跨域】
例:
取得左上角 坐标为(10,5)、大小为 50×50像素的区域的图像数据
var imageData = context.getImageData(10, 5, 50, 50);
说明:
- 返回的对象是 ImageData 的实例;
- ImageData 对象都有三个属性:width、height 和 data;
- data 属性是一个数组,保存着图像中每一个像素的数据;
-
每一个像素用4个元素来保存;分别表示红、绿、蓝和透明度值。
- 第一个像素的数据就保存在数组的第 0到第 3个元素中;
var data = imageData.data, red = data[0], green = data[1], blue = data[2], alpha = data[3];
数组中每个元素的值都介于 0到 255之间(包括 0和 255);
例子:
灰阶过滤器-获取图像的黑白版。
1 var drawing = document.getElementById("drawing"); 2 //确定浏览器支持<canvas>元素 3 if (drawing.getContext){ 4 var context = drawing.getContext("2d"), 5 image = document.images[0],imageData, 6 data, 7 i, 8 len, 9 average, 10 red, 11 green, 12 blue, 13 alpha; 14 //绘制原始图像 15 context.drawImage(image, 0, 0); 16 //取得图像数据 17 imageData = context.getImageData(0, 0, image.width, image.height); 18 data = imageData.data; 19 for (i=0, len=data.length; i < len; i+=4){ 20 red = data[i]; 21 green = data[i+1]; 22 blue = data[i+2]; 23 alpha = data[i+3]; 24 //求得 rgb 平均值 25 average = Math.floor((red + green + blue) / 3); 26 //设置颜色值,透明度不变 27 data[i] = average; 28 data[i+1] = average; 29 data[i+2] = average; 30 } 31 //回写图像数据并显示结果 32 imageData.data = data; 33 context.putImageData(imageData, 0, 0); 34 }
- for 循环遍历了图像数 据中的每一个像素;
- 取得每个像素的红、绿、蓝颜色值
- 计算出它们的平均值。再把这个平均值设置为每个颜色的值
- 结果就是去掉了每个像素的颜色, 只保留了亮度接近的灰度值(即彩色变黑白)
Made by ---- Rise To The Heightest Then Qualitative Change

浙公网安备 33010602011771号