Manipulating video as image
<!DOCTYPE html> <html> <head> <title>Manipulating images and video</title> <meta charset="utf-8"> /*w ww . j a va 2s . c om*/ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { let video = $("#myVideo"); // Trigger for video play button $("#play").click(function() { video.get(0).play(); }); // Trigger for video stop button $("#stop").click(function() { video.get(0).pause(); }); let canvas = $("#myCanvas"); let context = canvas.get(0).getContext("2d"); video.bind("play", function() { drawCanvas(); }); function drawCanvas() { if (video.get(0).paused || video.get(0).ended) return false; context.drawImage(video.get(0), 0, 0, 500, 281); let imageData = context.getImageData(0, 0, canvas.width(), canvas.height()); let pixels = imageData.data; // Clear the image context.clearRect(0, 0, canvas.width(), canvas.height()); // Number of tiles let numTileRows = 36; let numTileCols = 64; // Dimensions of each tile let tileWidth = imageData.width/numTileCols; let tileHeight = imageData.height/numTileRows; // Loop through each tile for (let r = 0; r < numTileRows; r++) { for (let c = 0; c < numTileCols; c++) { let x = (c*tileWidth)+(tileWidth/2); let y = (r*tileHeight)+(tileHeight/2); // Use Math.floor to convert the pixel positions to integers let pos = (Math.floor(y)*(imageData.width*4))+(Math.floor(x)*4); let red = pixels[pos]; let green = pixels[pos+1]; let blue = pixels[pos+2]; context.fillStyle = "rgb("+red+", "+green+", "+blue+")"; // Draw the pixelated rectangle context.fillRect(x-(tileWidth/2), y-(tileHeight/2), tileWidth, tileHeight); }; }; setTimeout(drawCanvas, 30); }; }); </script> </head> <body> <canvas id="myCanvas" width="500" height="281"> <video id="myVideo" width="500" height="281" controls="true"> <source src="http://java2s.com/style/demo/your.webm" type="video/webm"></source> </video> </canvas> <div> <button id="play">Play</button> <button id="stop">Stop</button> </div> </body> </html>