I accidentally read "pro html5 programming" two days ago and found that html5 can also support image processing. Let me explain it a little here.
Similar to matlab processing images, the form of image matrix is also used here.
Here is a simple example:
<!DOCTYPE html> <html> <head> <title>canvas图像处理</title> </head> <body> <h1>canvas</h1> <canvas id="canvas1" width="200" height="150">是时候更换浏览器了<a href="http://firefox.com.cn/download/">点击下载firefox</a></canvas> <script> var canvas1=document.getElementById('canvas1'); var context1=canvas1.getContext('2d'); image=new Image(); image.src="z.JPG"; image.onload=function(){ context1.drawImage(image,0,0);//绘制原始图像,(0,0)表示图像的左上角位与canvas画布的位置 } </script> <br/> <button onclick="draw()">图像的反转</button> <br/> <canvas id="canvas2" width="200" height="150"></canvas> <script> function draw(){ var canvas2=document.getElementById('canvas2'); var context2=canvas2.getContext('2d'); var imagedata=context1.getImageData(0,0,image.width,image.height); var imagedata1=context2.createImageData(image.width,image.height); for(var j=0;j<image.height;j+=1) for(var i=0;i<image.width;i+=1){ k=4*(image.width*j+i); imagedata1.data[k+0]=255-imagedata.data[k+0]; imagedata1.data[k+1]=255-imagedata.data[k+1]; imagedata1.data[k+2]=255-imagedata.data[k+2]; imagedata1.data[k+3]=255; } context2.putImageData(imagedata1,0,0); } </script> </body> </html>
1) Canvas call of html5
var canvas1=document.getElementById('canvas1');//获取canvas元素 var context1=canvas.getContext('2d');//此时获取到canvas图像上下文
2) Create an image and draw the original image
image=new Image();//创建image对象 image.src="z.JPG";//image的地址 image.onload=function(){ context1.drawImage(image,0,0);//绘制原始图像,(0,0)表示图像的左上角位与canvas画布的位置 }
3 ) Obtain the rgba matrix of the image and operate
var imagedata=context1.getImageData(0,0,image.width,image.height); //getImageData(x1,y1,x2,y2)获取图像的rgba矩阵,其中截取图像的大小为(x1,y1)-(x2,y2) 的矩阵 var imagedata1=context2.createImageData(image.width,image.height); //createImageData(x,y):创建宽高分别为x,y的图像矩阵 for(var j=0;j<image.height;j+=1) for(var i=0;i<image.width;i+=1){ k=4*(image.width*j+i); imagedata1.data[k+0]=255-imagedata.data[k+0]; imagedata1.data[k+1]=255-imagedata.data[k+1]; imagedata1.data[k+2]=255-imagedata.data[k+2]; imagedata1.data[k+3]=255; } context2.putImageData(imagedata1,0,0); //putImageData(image,0,0):将image矩阵的添加为context 原矩阵的一部分,起点为(0,0) }
The following is a detailed description of the storage form of html5 images:
There are four pixels in each pixel in the matrix The channels store the values of r/g/b/a respectively. (Four values are arranged continuously in order, which is a one-dimensional matrix)
So every two pixels are separated by 4 bits. When calculating,
k=4*(image.width*j+i);为像素点(i,j)的位置,
imagedata1.data[k+0]表示R分量,依次类推,其中剩下的分别为G、B分量还有透明度。
In this way, the above program realizes a simple image reversal function.
The effect is as follows:
In addition, it should be noted that the getImageData() function may involve cross-domain problems, so it is recommended to configure the apache environment and place the html Go to its root directory to operate.
The above is the detailed content of Implementation code sharing of html5 canvas image processing. For more information, please follow other related articles on the PHP Chinese website!