canvas图像像素处理-createImageData()(二)

旧城等待, 2021-09-12 01:18 592阅读 0赞

一.知识点

1.getImageData() 从Canvas画板上取得所选区域的像素数据

2.putImageData() 方法函数则表示将所得到的像素数据描画到Canvas画板上形成图形

3.createImageData() 方法创建新的空白 ImageData 对象。新对象的默认像素值

createImageData函数有两种函数原型,其语法分别如下所示

(1).createImageData(sw, sh);
其一,返回指定大小的imageData对象。
(2).createImageData(imagedata);
其二,返回与指定对象相同大小的imageData对象。

首先需要知道的是,通过createImageData返回的是一个空的imageData对象,必须要针对其像素进行赋值才能显示到Canvas画板上。

具体步骤:

(1).利用createImageData新建像素

①使用createImageData创建新的空白 ImageData 对象

var imgData=ctx.createImageData(100,100);
②对imgData进行赋值。
for (i=0; i<imgData.width*imgData.height*4;i+=4){
imgData.data[i+0]=255;
imgData.data[i+1]=0;
imgData.data[i+2]=0;
imgData.data[i+3]=155;
}
③利用putImageData将imgData画到Canvas画板上。
ctx.putImageData(imgData,220,260);

(2).createImageData(imagedata);

①图片数据读取完成后,首先将图片数据绘制到Canvas画板上。
ctx.drawImage(image,10,10);

②然后用getImageData函数从画板上取得像素数据。
var imgData=ctx.getImageData(50,50,200,200);

③使用createImageData返回与imgData相同大小的ImageData对象。
var imgData01=ctx.createImageData(imgData);

var imgData=ctx.createImageData(100,100);
ctx.putImageData(imgData,10,10);

二.注意

用getImageData()获取像素值,可以不用考虑alpha,但是createImageData()创建像素时,需要考虑alpha值

三.例子

(1).简单的列子

20170303160104476

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <canvas id="canvas" style="display:block;margin:0 auto;border:1px solid #aaa;">
  9. 您的浏览器尚不支持canvas
  10. </canvas>
  11. <script>
  12. var canvas = document.getElementById("canvas");
  13. var context = canvas.getContext("2d");
  14. window.onload = function(){
  15. canvas.width = 800;
  16. canvas.height = 800;
  17. var imageData = context.createImageData( canvas.width/2 , canvas.height/2 );
  18. var pixelData = imageData.data;
  19. //二维循环来遍历每一个像素
  20. for (var i=0;i<canvas.width/2 * canvas.height/2;i++){
  21. pixelData[i*4+0]=0;
  22. pixelData[i*4+1]=0;
  23. pixelData[i*4+2]=0;
  24. pixelData[i*4+3]=55;
  25. }
  26. context.putImageData(imageData,0,0,50,50,canvas.width/2 , canvas.height/2);
  27. }
  28. </script>
  29. </body>
  30. </html>

(2).颜色快

20170303154026542

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <canvas id="canvas" style="display:block;margin:0 auto;border:1px solid #aaa;">
  9. 您的浏览器尚不支持canvas
  10. </canvas>
  11. <script>
  12. var canvas = document.getElementById("canvas");
  13. var context = canvas.getContext("2d");
  14. window.onload = function(){
  15. canvas.width = 800;
  16. canvas.height = 800;
  17. var imageData = context.createImageData( canvas.width , canvas.height );
  18. var pixelData = imageData.data;
  19. //二维循环来遍历每一个像素
  20. for( var i = 0 ; i < canvas.height ; i ++ )
  21. for( var j = 0 ; j < canvas.width ; j ++ ){
  22. var p = i*canvas.width+j;
  23. pixelData[4*p+0] = parseInt(Math.pow(Math.cos(Math.atan2(j-400,i-400)/2),2)*255);
  24. pixelData[4*p+1] = parseInt(Math.pow(Math.cos(Math.atan2(j-400,i-400)/2-2*Math.acos(-1)/3),2)*255);
  25. pixelData[4*p+2] = parseInt(Math.pow(Math.cos(Math.atan2(j-400,i-400)/2+2*Math.acos(-1)/3),2)*255);
  26. pixelData[4*p+3] = 255;//a对象的赋值
  27. }
  28. context.putImageData( imageData , 0 , 0 , 0 , 0 , canvas.width , canvas.height );
  29. }
  30. </script>
  31. </body>
  32. </html>

发表评论

表情:
评论列表 (有 0 条评论,592人围观)

还没有评论,来说两句吧...

相关阅读

    相关 图像轮廓单一化_数字图像处理

        图像轮廓单一像素化是许多图像处理中必不可少的一步,现在主流的方法都是基于旋转的。今天早上在床上躺了很久,我个人觉得单一像素化其实可以用动态规划结合欧几里德距离来解决的。