HTML5/ImageData
HTML5 Image data Manipulation
Soul-Learner
2015. 3. 3. 08:33
HTML5 이미지 데이터 접근 및 조작
http://www.html5canvastutorials.com/advanced/html5-canvas-get-image-data-tutorial/
캔바스에 그려진 이미지 영역을 마우스로 클릭하면 해당 영역의 픽셀이 투명하게 변경되어 배경이 보이는 효과를 구현한 예
<!DOCTYPE HTML> <html> <head> <style> body { margin: 0px; padding: 20px; } canvas { background:url(bg.jpg) } </style> <script type="text/javascript" src="jquery-2.1.3.min.js"></script> <script type="text/javascript"> $(function(){ // $(document).ready(function(){ $('#myCanvas').on('mousedown', function(evt){ var rect = canvas.getBoundingClientRect(); var cx = evt.clientX-rect.left; var cy = evt.clientY-rect.top; //alert('클릭됨('+cx+','+cy+')'); manipulate(cx, cy); }); }); </script> </head> <body> <canvas id="myCanvas" width="500" height="500"></canvas> <script> var canvas = null; var imageData = null; // 캔바스에 이미지를 그린다 function drawImage(imageObj) { canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); var imageWidth = imageObj.width; var imageHeight = imageObj.height; context.drawImage(imageObj, 0, 0, canvas.width, canvas.height); } var imageObj = new Image(); imageObj.onload = function() { drawImage(this); }; imageObj.src = 'wall.png'; // 마우스 클릭된 영역을 투명하게 처리하는 예 function manipulate(cx,cy) { if(!canvas) canvas = document.getElementById('myCanvas'); context = canvas.getContext('2d'); imageData = context.getImageData(0, 0, canvas.width, canvas.height); var data = imageData.data; // iterate over all pixels for(var y = cy-15; y < cy+15; y++) { // loop through each column for(var x = cx-15; x < cx+15; x++) { /* var red = data[((imageWidth * y) + x) * 4]; var green = data[((imageWidth * y) + x) * 4 + 1]; var blue = data[((imageWidth * y) + x) * 4 + 2]; var alpha = data[((imageWidth * y) + x) * 4 + 3];*/ data[((canvas.width * y) + x) * 4 + 3] = 0; } } context.putImageData(imageData, 0, 0); //context.putImageData(imageData, canvasX, canvasY); //context.putImageData(imageData, canvasX, canvasY, sx, sy, sWidth, sHeight); } </script> <input type="button" value="확인" onclick="manipulate(200,200)"> </body> </html>