No he tenido mucho tiempo estos días, pero al final he probado de crear un canvas virtual como dijiste. Y de ahí ir obteniendo la imagen original para modificando siempre con respecto a esa imagen.
Código Javascript
:
Ver originalvar canvas = document.getElementById("canvas");
var context = canvas.getContext( '2d' );
canvas.width = img.width;
canvas.height = img.height;
context.drawImage(img, 0, 0, img.width, img.height);
var original = document.createElement("canvas");
var originalContext = original.getContext( '2d' );
original.width = img.width;
original.height = img.height;
originalContext.drawImage(img, 0, 0, img.width, img.height);
var btn=document.getElementById('btn');
btn.onclick=function(){
btn.setAttribute("disabled","disabled");
setInterval( function(){
imageData = originalContext.getImageData(0, 0, original.width, original.height);
context.putImageData( pixelar(imageData,img.width,img.height,pixeles), 0, 0);
},100 );
}
A primera vista parece que no tenga sentido lo que he hecho, pues parece que siempre se va a mostrar lo mismo. Pero lo que ocurre es que la función pixelar no goza de transparencia referencial. Pues, pixelar ahora toma una porción aleatoria de píxeles y de ahí hace la media. Aquí el código entero:
http://jsfiddle.net/jefebrondem/745Ds/5/
Gracias!