HTML 5 canvas 图像处理

前两天无意中看了下《pro html5 programming》,发现html5竟然也能很好的支持图像处理,在此稍稍交代一下。

创新互联建站10多年企业网站建设服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,企业网站建设及推广,对木托盘等多个领域拥有丰富的网站运维经验的网站建设公司。

与matlab处理图像类似的是,这里也是采用图像矩阵的形式。

下面就介绍一个简单的例子:

 
 
 
 
  1.       
  2.    
  3.       
  4. canvas图像处理     
  5.      
  6.      
  7. canvas

         
  8. 是时候更换浏览器了点击下载firefox    
  9.    

  10.    
  11. 图像的反转   

  12.    
  13.     
  14.     
  15.      
  16.    
  17.       
  18.    
  19.       
  20. canvas图像处理     
  21.      
  22.      
  23. canvas

         
  24. 是时候更换浏览器了点击下载firefox    
  25.    

  26.    
  27. 图像的反转   

  28.    
  29.     
  30.     
  31.      
  32.    
  33.       
  34.    
  35.       
  36. canvas图像处理     
  37.      
  38.      
  39. canvas

         
  40. 是时候更换浏览器了点击下载firefox    
  41.    

  42.    
  43. 图像的反转   

  44.    
  45.     
  46.     
  47.      
  48.    

1)html5 的canvas调用

 
 
 
 
  1. var canvas1=document.getElementById('canvas1');//获取canvas元素   
  2. var context1=canvas.getContext('2d');//此时获取到canvas图像上下文   
  3.  

2)创建图像并绘制原始图像

 
 
 
 
  1. image=new Image();//创建image对象   
  2. image.src="z.JPG";//image的地址   
  3. image.onload=function(){   
  4. context1.drawImage(image,0,0);//绘制原始图像,(0,0)表示图像的左上角位与canvas画布的位置   
  5. }   
  6.  

3)获取图像的rgba矩阵并操作

 
 
 
 
  1. var imagedata=context1.getImageData(0,0,image.width,image.height);   
  2. //getImageData(x1,y1,x2,y2)获取图像的rgba矩阵,其中截取图像的大小为(x1,y1)-(x2,y2) 的矩阵   
  3. var imagedata1=context2.createImageData(image.width,image.height);   
  4. //createImageData(x,y):创建宽高分别为x,y的图像矩阵   
  5.    for(var j=0;j
  6.     for(var i=0;i
  7.               k=4*(image.width*j+i);   
  8.           imagedata1.data[k+0]=255-imagedata.data[k+0];   
  9.           imagedata1.data[k+1]=255-imagedata.data[k+1];   
  10.           imagedata1.data[k+2]=255-imagedata.data[k+2];   
  11.                   imagedata1.data[k+3]=255;   
  12.         }   
  13.     context2.putImageData(imagedata1,0,0);   
  14. //putImageData(image,0,0):将image矩阵的添加为context 原矩阵的一部分,起点为(0,0)   

下面就细说下html5图像的储存形式:

矩阵中每个像素点有四个通道分别储存r/g/b/a的值。(四个值按序连续的排列,为一维矩阵)

所以每两个像素间相隔4位,计算时

 
 
 
 
  1. k=4*(image.width*j+i);为像素点(i,j)的位置,  

 

  
 
 
 
  1. imagedata1.data[k+0]表示R分量,依次类推,其中剩下的分别为G、B分量还有透明度。  

这样上面的程序就实现了简单的图像的反转功能。
效果如下:

另外需要注意的是,getImageData()函数可能会涉及到跨域的problem,所以建议配置apache环境并将该html放置到其根目录下进行操作。


本文名称:HTML 5 canvas 图像处理
分享URL:http://csdahua.cn/article/djccidc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流