Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/12/2013, 18:20
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 10 meses
Puntos: 206
Respuesta: Problema con paleta de colores PHP

Sí, a crear tu propio algoritmo de compresión de imágenes con paleta dinámica.

Por ejemplo:
Código PHP:
Ver original
  1. <?php
  2. header( "Content-type: image/png" );
  3. $imageName="cat.jpg";
  4. $size  = getimagesize($imageName);
  5. $img = imagecreatefromjpeg($imageName);
  6.  
  7. for ($x=0;$x<$size[0];$x++)
  8. {
  9.     for ($y=0;$y<$size[1];$y++)
  10.     {
  11.         $pixel = imagecolorat($img, $x, $y);
  12.         $pixelColor = imagecolorsforindex($img, $pixel);
  13.  
  14.         $rango=51;
  15.         $r=(int)floor($pixelColor["red"]/$rango)*$rango;
  16.         $g=(int)floor($pixelColor["green"]/$rango)*$rango;
  17.         $b=(int)floor($pixelColor["blue"]/$rango)*$rango;
  18.  
  19.         $index=imagecolorexact($img,$r,$g,$b);
  20.         imagesetpixel($img, $x, $y, $index);
  21.     }
  22. }
  23.  
  24. imagepng($img);
  25.  
  26. ?>

He creado una paleta de 216 colores (51 es divisor de 255, aunque en realidad puedes poner cualquier cifra entre 0 y 255; si no son divisores, habrá un insignificante e indetectable error en el redondeo de colores cercanos al blanco absolto), cada componente de color puede coger valores de 0, 51, 102, 153, 205 y 255. Seis colores. Tres componentes=6*6*6=216.

El límite es tu imaginación. Puedes crear tú en un array la paleta, y hacer una función que escoja el color aproximado (por ejemplo sumando la diferencia de cada componente del pixel de la imagen con el componente de cada color de la paleta, y quedarse el menor).

Última edición por marlanga; 04/12/2013 a las 18:28