Página 1 de 1

[php] generar logo con colores dinamicos

Publicado: 18 Oct 2009, 15:45
por cacho_lagarza
Hola gente!

Estoy buscando algun tutorial o alguna idea de donde empezar a indagar para crear un logo en PHP con colores variables (algo asi como hacen en Fotolog.com, Flohoo.com, etc. en cada página de usuario)

La idea es crear un logo a partir de un .png original (supongo) que se adapte a los colores de la página del usuario.

En primera instancia se me ocurre que resultaría en algo del estilo: logo.php?1=000000&2=FFFFFF pero eso es pura suposición

ideas? :blink:

saludos!

Re: [php] generar logo con colores dinamicos

Publicado: 19 Oct 2009, 02:31
por elQuique
En primer lugar la teoría de Colores Complementarios, que permite saber que color se complementa con cual, de esa forma si sabes que el fondo en negro, la letra (o logo) debería ser blanco, o si el fondo es rojo, la letra (o logo) debería ser amarillo de forma que se note.

En el circulo se pueden ver los Colores Diametralmente Opuestos o Colores Complementarios
Imagen

Información de colores complementarios: http://es.wikipedia.org/wiki/Colores_complementarios

Siguiendo con la Teoría, el FFFFFF o 000000, etc, son 6 caracteres hexadecimales, que representan 3 pares de colores de 0 a 256 (00 es 0 y FF es 256 en decimal), son 3 pares porque 3 son los valores que componen la Paleta RGB, o Red Green Blue, o sea Rojo Verde Azul, que es la que utilizamos en Internet, ya que es la apropiada para Pantallas o Monitores.

Información sobre RGB: http://es.wikipedia.org/wiki/Modelo_de_color_RGB

Sabiendo esa base, tienes dos opciones:
A) Tenes 4 o 5 logos y según el fondo seleccionas el apropiado. Solución: lees el fondo y muestras con un IF. Listo fin de la historia y hasta acá lees.

B) Generas o coloreas un Logo Base. Solución: necesitas ver un poco más de PHP y sus capacidades de Procesamiento y Generación de Imágenes. Sigue leyendo...

Para esta tarea, PHP propone varias librerías de manejo de imágenes:

Exif para manejo de metadata en Imágenes
GD para procesar Imágenes
ImageMagick para procesar Imágenes
etc

La Exif, es para otra cosa, nos queda GD e ImageMagick, GD esta disponible en el 90% de los servidores, y la ImageMagick no suele estarlo, por tanto nos quedamos con GD.

Más información sobre Librerías de Procesamiento de Imágenes en PHP: http://www.php.net/manual/en/refs.utilspec.image.php

Usando GD, yo utilizaría una imagen simple con color neutro, tipo Blanco, o Verde, en 1 o 2 colores, ya que a mayor cantidad de color, mayor complejidad.

Ese logo, sea cual sea lo tendría en:

GIF, si son pocos colores y es bien simple, con o sin transparencias. Hasta 256 colores.
JPG, si es un logo complejo con muchos colores, sin transparencias. Soporte de miles de colores (16k)
PNG, si es un logo simple o complejo pero con muchos colores, y necesitas si o si transparencias. Cuidado con IE, que no soporta PHP a pesar de ser un estándar desde los 90.

Decidido el tipo de imagen, y conociendo la forma del logo, vas a utilizar según el caso las funciones:

imagefill, a esta le indicas una imagen, y una coordenada x, y, dentro de ella, además de un color, y con eso se va a rellenar toda esa zona con el color indicado. Ejemplo si es un cuadrado de 200 x 200 y mitad es blanco y mitad rojo, tu indicas: x=100, y=100 color=FF6600 y pintara la parte izquierda que era blanca en color Rojo.

Mas info de imagefill: http://www.php.net/manual/en/function.imagefill.php

El imagefill dependiendo de tamaño y cantidad de colores del logo, puede complicarse y ser lento, en ese caso, puedes recorrer cada punto y cambiarlo por su color complementario (Usando la teoría de color complementario).

Para esto vas a usar dos funciones:

imagecolorstotal, para saber la cantidad de colores de la imagen. Más info: http://www.php.net/manual/en/function.i ... stotal.php

imagecolorsforindex, para saber el color actual de ese punto. Más info: http://www.php.net/manual/en/function.i ... rindex.php

imagecolorset, para cambiar un color por otro: Más info: http://www.php.net/manual/en/function.imagecolorset.php

Con estas tres funciones puedes: recorrer color por color (imagecolorstotal), saber cual es (imagecolorsforindex) y cambiarlo por otro (imagecolorset).

Que en PHP sería algo así:

Código: Seleccionar todo

// Cuantos colores tiene la imagen ?
$totalcolores = ImageColorsTotal($imagen);
// Recorrer cada color de la imagen
for( $i=0; $i<$totalcolores; $i++) {
// Obtener el color actual
$viejocolor = imagecolorsforindex($image, $i);
// obtener el complemento de cada color
$complementorojo = complemento($viejocolor[red]);
$complementoverde = complemento($viejocolor[green]);
$complementoazul = complemento($viejocolor[blue]);
// cambiar el color actual por el complemento
imagecolorset($image, $i, $complementorojo, $complementoverde, $complementoazul);
}
La función complemento, debe tomar el color y calcular el complementario, según la teoría de color, eso te lo dejo de tarea porque no me lo acuerdo de memoria, además a mi me gusta programar PHP y no el diseño gráfico :)

Re: [php] generar logo con colores dinamicos

Publicado: 19 Oct 2009, 15:08
por Alejandro
:alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza: :alabanza:

Re: [php] generar logo con colores dinamicos

Publicado: 19 Oct 2009, 21:52
por cacho_lagarza
Que servicio!
Muchas gracias :P

Re: [php] generar logo con colores dinamicos

Publicado: 20 Oct 2009, 07:43
por vinoamateur
Impresionante explicación, incluso para los que no la estábamos buscando fue super interesante, gracias!

Re: [php] generar logo con colores dinamicos

Publicado: 20 Oct 2009, 22:33
por elQuique
Me alegro que sea útil, y mejor aun si sirve a más de uno :)