<script> var imageObj = new Image(); var data; var canvas, context; var destX, destY, sourceWidth, sourceHeight; var imageData; var pixwidth; window.onload = function() { canvas = document.getElementById("myCanvas"); context = canvas.getContext("2d"); imageObj.src = document.getElementById("myimage").src; pixwidth = 15; sampleImage(imageObj); clearCanvas(); transformImage(); } function clearCanvas() { context.clearRect(0,0,canvas.width, canvas.height) ; document.getElementById('display').innerHTML = data.length; } function sampleImage(imageObj) { destX = 0; destY = 0; sourceWidth = imageObj.width; sourceHeight = imageObj.height; context.drawImage(imageObj, destX, destY); imageData = context.getImageData(destX, destY, sourceWidth, sourceHeight); data = imageData.data; } function transformImage() { // iterate over all pixels based on x and y coordinates. // loop through each row for(var y = 0; y < sourceHeight; y+=pixwidth) { // ROWS // loop through each column for(var x = 0; x < sourceWidth; x+=pixwidth) { // COLUMNS var red = data[((sourceWidth * y) + x) * 4]; var green = data[((sourceWidth * y) + x) * 4 + 1]; var blue = data[((sourceWidth * y) + x) * 4 + 2]; /* var red = data[ (y + x) * 4]; var green = data[ (y + x) * 4 + 1]; var blue = data[ (y + x) * 4 + 2];*/ context.beginPath(); //context.arc(x+300+x, y*2, pixwidth, 0, Math.PI*2, true); context.rect(x+100, y+100, pixwidth, pixwidth); context.fillStyle = 'rgb('+red+','+green+','+blue+')'; context.fill(); context.lineWidth = 1; context.strokeStyle = 'black'; context.stroke(); } } } function distortImage(event) { clearCanvas(); var stage = canvas.getBoundingClientRect(); //alert(event.clientX); var mouseX = event.clientX - stage.left; // this is in case you position canvas using css var mouseY = event.clientY - stage.top; document.getElementById('display').innerHTML = mouseX; // iterate over all pixels based on x and y coordinates. // loop through each row for(var y = 0; y < sourceHeight; y+=pixwidth) { // ROWS // loop through each column for(var x = 0; x < sourceWidth; x+=pixwidth) { // COLUMNS var red = data[((sourceWidth * y) + x) * 4]; var green = data[((sourceWidth * y) + x) * 4 + 1]; var blue = data[((sourceWidth * y) + x) * 4 + 2]; /* var red = data[ (y + x) * 4]; var green = data[ (y + x) * 4 + 1]; var blue = data[ (y + x) * 4 + 2];*/ var A = mouseX - x + 100; var B = mouseY - y + 100; var AA = Math.pow(A,2); var BB = Math.pow(B,2); var D = Math.sqrt(AA+BB); //document.getElementById('display').innerHTML = mouseX + " / " + mouseY + " / " +D; context.save(); context.translate(x+100, y+100); context.rotate(D/100); context.beginPath(); //context.arc(-pixwidth/2 + D/10, -pixwidth/2 + D/10, pixwidth + D/30, 0, Math.PI*2, true); context.rect(-pixwidth/2 + D/10, -pixwidth/2 + D/10, pixwidth , pixwidth ); context.fillStyle = 'rgb('+red+','+green+','+blue+')'; context.fill(); context.lineWidth = 1; context.strokeStyle = 'black'; context.stroke(); context.restore(); } } } </script> </head> <body> <canvas id="myCanvas" width="700" height="1000" onMouseMove="distortImage(event)"></canvas> <img src="santi_jace.jpg" id="myimage" width="200" height="200" style="display:none;" /> <div id="display"> </div>