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?
saludos!
[php] generar logo con colores dinamicos
- cacho_lagarza
- Nivel 2
- Mensajes: 35
- Registrado: 03 Jun 2009, 10:37
- Twitter: @cacho_lagarza
- Ubicación: Montevideo, Uruguay
- Contactar:
- elQuique
- Moderador
- Mensajes: 2227
- Registrado: 05 May 2009, 18:43
- Twitter: @elQuique
- Ubicación: Florida, Uruguay
- Contactar:
Re: [php] generar logo con colores dinamicos
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
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í:
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 :)
En el circulo se pueden ver los Colores Diametralmente Opuestos o Colores Complementarios
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);
}
- cacho_lagarza
- Nivel 2
- Mensajes: 35
- Registrado: 03 Jun 2009, 10:37
- Twitter: @cacho_lagarza
- Ubicación: Montevideo, Uruguay
- Contactar:
Re: [php] generar logo con colores dinamicos
Que servicio!
Muchas gracias :P
Muchas gracias :P
- vinoamateur
- Nivel 4
- Mensajes: 151
- Registrado: 13 Sep 2009, 18:47
- Twitter: @controlaltweb
Re: [php] generar logo con colores dinamicos
Impresionante explicación, incluso para los que no la estábamos buscando fue super interesante, gracias!
- elQuique
- Moderador
- Mensajes: 2227
- Registrado: 05 May 2009, 18:43
- Twitter: @elQuique
- Ubicación: Florida, Uruguay
- Contactar:
Re: [php] generar logo con colores dinamicos
Me alegro que sea útil, y mejor aun si sirve a más de uno :)