Ver Mensaje Individual
  #11 (permalink)  
Antiguo 11/10/2012, 12:23
Avatar de ryugen
ryugen
Colaborador
 
Fecha de Ingreso: agosto-2008
Ubicación: Rosario, Santa Fe
Mensajes: 350
Antigüedad: 16 años, 3 meses
Puntos: 187
Respuesta: Aplicar efecto Canvas

Puedes ver aquí un ejemplo de lo que quieres funcionando:

http://jsfiddle.net/37BUa/6/

De todas formas coincido bastante con el pensamiento de furoya.

Porque en todas tus respuesta pareciera como si no te hubieses puesto a pensar que es lo que necesitabas y al contrario lo solicitabas hecho.

Que hace el código (utiliza jQuery para simplificar) ?
Código Javascript:
Ver original
  1. (function() {
  2. (function() {
  3.  var supportsCanvas = !!document.createElement('canvas').getContext;
  4.  
  5.  function greyImages(cva,img) {
  6.    
  7.     var ctx =cva.getContext('2d');
  8.     var imageData, px, length, i = 0,
  9.     red, green, blue, grey;
  10.  
  11.     ctx.drawImage(img, 0, 0);
  12.  
  13.     imageData = ctx.getImageData(0, 0, cva.width, cva.height);
  14.     px = imageData.data;
  15.     length = px.length;
  16.  
  17.     for ( ; i < length; i+= 4 ) {
  18.        // rgba
  19.        grey = 0.3*px[i] + 0.59*px[i+1] + 0.11*px[i+2];
  20.        px[i] = px[i+1] = px[i+2] = grey;
  21.     }
  22.  
  23.     ctx.putImageData(imageData, 0, 0);
  24.  }
  25.     $(document).ready(function(){
  26.         $('.icono').each(function(){
  27.             var _this = $(this);
  28.             var _canvas = $(document.createElement('canvas'));
  29.             _canvas.width(_this.width());
  30.             _canvas.height(_this.height());
  31.             _canvas.attr('width',_this.width());
  32.             _canvas.attr('height',_this.height());
  33.             _canvas.css('top',_this.position().top);
  34.             _canvas.css('left',_this.position().left);
  35.             _this.after(_canvas);
  36.             greyImages(_canvas.get(0),_this.get(0));            
  37.         });            
  38.     });
  39. })();

Pues:
1) Para cada imagen crea un canvas (con el ancho y alto del canvas)
2) Copia la imagen en el contexto del canvas
3) Posiciona de manera absoluta el canvas sobre la imagen
4) Por cada pixel del canvas lo reemplaza por su correspondiente en grises

Para llegar al código antes de hacerlo pensé en este plan y luego lo implementé

Saludos