HTML5 canvas can handle many image problems, so how to use HTML5 canvas to realize image mosaic? This article will introduce to you how to implement image mosaic in HTML5 canvas. Let’s take a look at the specific content together.
We give the code first, and then analyze
HTML5 canvas implements the image mosaic code as follows
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <meta charset="utf-8" /> <script type="text/javascript"> var imageData; function draw() { var canvas = document.getElementById('SimpleCanvas'); var mem_canvas = document.createElement('canvas'); if (!canvas || !canvas.getContext) { return false; } var context = canvas.getContext('2d'); var img = new Image(); img.onload = function onImageLoad() { mem_canvas.width = img.width; mem_canvas.height = img.height; var mem_context = mem_canvas.getContext('2d'); mem_context.drawImage(img, 0, 0); imageData = mem_context.getImageData(0, 0, mem_canvas.width, mem_canvas.height); CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, 8); context.drawImage(mem_canvas, 32, 32); } img.src = 'img/luffy.jpg'; } function CreateMosaic(context, width,height,mosaicSize) { var x=0; var y=0; for (y = 0; y < height; y = y + mosaicSize) { for (x = 0; x < width; x = x + mosaicSize) { var cR = imageData.data[(y * width + x) * 4]; var cG = imageData.data[(y * width + x) * 4 + 1]; var cB = imageData.data[(y * width + x) * 4 + 2]; context.fillStyle = "rgb("+cR+","+cG+","+cB+")"; context.fillRect(x, y, x + mosaicSize, y + mosaicSize); } } } </script> </head> <body onload="draw()" style="background-color:#D0D0D0;"> <canvas id="SimpleCanvas" width="640" height="360" style="background-color:#FFFFFF;"></canvas> <div>Canvas Demo</div> <div id="output"></div> </body> </html>
Description:
The on function of the body tag performs the drawing function when the page is displayed.
The draw function creates an HTML canvas object in memory, reads the original image and draws it on the canvas. Call the rendered canvas object's getImageData method to obtain pixel information.
function draw() { var canvas = document.getElementById('SimpleCanvas'); var mem_canvas = document.createElement('canvas'); if (!canvas || !canvas.getContext) { return false; } var context = canvas.getContext('2d'); var img = new Image(); img.onload = function onImageLoad() { mem_canvas.width = img.width; mem_canvas.height = img.height; var mem_context = mem_canvas.getContext('2d'); mem_context.drawImage(img, 0, 0); imageData = mem_context.getImageData(0, 0, mem_canvas.width, mem_canvas.height); CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, 8); context.drawImage(mem_canvas, 32, 32); } img.src = 'img/luffy.jpg'; }
The mosaic processing is performed using the read width and height of the original image, the context of the HTML canvas, the size of the mosaic, and the pixel information of the original image. Mosaic processing is implemented by the CreateMosaic() function. Since the pixel information size of the image is large, it is not stored in the parameters of the CreateMosaic() function, but is stored in a global variable. If you want to improve the readability of your code, you can give the CreateMosaic() function parameters a structure.
Use a loop in CreateMosaic to get the pixel value based on the mosaic size. If the mosaic size is 4, you can get the pixel value of every 4 pixels, and use the color of the obtained pixel value to draw the square mosaic size on the canvas.
function CreateMosaic(context, width,height,mosaicSize) { var x=0; var y=0; for (y = 0; y < height; y = y + mosaicSize) { for (x = 0; x < width; x = x + mosaicSize) { var cR = imageData.data[(y * width + x) * 4]; var cG = imageData.data[(y * width + x) * 4 + 1]; var cB = imageData.data[(y * width + x) * 4 + 2]; context.fillStyle = "rgb("+cR+","+cG+","+cB+")"; context.fillRect(x, y, x + mosaicSize, y + mosaicSize); } } }
Running results:
Changes in the degree of mosaic
CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, 8);
Just change the value of the fourth parameter of CreateMosaic You can change the depth of the mosaic.
The mosaic effect of the image when the fourth parameter value is 4
The image when the fourth parameter value is 2 Mosaic effect
The above is the detailed content of How to use HTML5 canvas to implement image mosaic. For more information, please follow other related articles on the PHP Chinese website!