Foros del Web » Programando para Internet » PHP »

gradientes

Estas en el tema de gradientes en el foro de PHP en Foros del Web. Hola amigos: Escribo para compartir un script para poner fondos degradados: Código: <?php header("Content-Type: image/png"); function elColor($color) { $red = 256 * 256; $green = ...
  #1 (permalink)  
Antiguo 09/04/2005, 08:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
gradientes

Hola amigos:


Escribo para compartir un script para poner fondos degradados:

Código:
 <?php
header("Content-Type: image/png"); 
function elColor($color) {
 $red = 256 * 256;
 $green = 256;
 $blue = 1;
 return ($red * $color[0]) + ($green * $color[1]) + ($blue * $color[2]);
}
function losColores($arrayColores) {
 $devolver = array();
 for ($i = 0; $i < count($arrayColores); $i ++)
  $devolver[$i] = elColor($arrayColores[$i]);
 return $devolver;
}
function desglose($fondo) {
 return array(hexdec($fondo[1]),hexdec($fondo[2]),hexdec($fondo[3]));
}
function rgbColor($fondo) {
 $red = 100;
 $green = 100;
 $blue = 100;
 if( eregi( "([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})", $fondo, $retornar ) )
  return $retornar;
 else
  return array($fondo, $red, $green, $blue);
}
function transitar($color1, $color2, $pasos) {
 $devolver = array();
 $pasos--;
 $devolver[0] = desglose(rgbColor($color1));
 $devolver[$pasos] = desglose(rgbColor($color2));
 $rIni = $devolver[0][0];
 $gIni = $devolver[0][1];
 $bIni = $devolver[0][2];
 $rFin = $devolver[$pasos][0];
 $gFin = $devolver[$pasos][1];
 $bFin = $devolver[$pasos][2];
 $rMed = ($rFin - $rIni) / $pasos;
 $gMed = ($gFin - $gIni) / $pasos;
 $bMed = ($bFin - $bIni) / $pasos;
 for ($i = 1; $i < $pasos; $i ++) {
  $devolver[$i] = array($rIni + round($rMed * $i), $gIni + round($gMed * $i), $bIni + round($bMed * $i));
 }
 return losColores($devolver);
}
if (isset($_GET["anchura"])) $anchura = $_GET["anchura"];
else $anchura = 100;
$altura = 1;
if (isset($_GET["color1"])) $color1 = $_GET["color1"];
else $color1 = "000123";
if (isset($_GET["color2"])) $color2 = $_GET["color2"];
else $color2 = "ffabcd";
$fondo1 = desglose(rgbColor($color1));
$fondo2 = desglose(rgbColor($color2));
$transito = transitar($color1, $color2, $anchura);
$destino = ImageCreateTrueColor($anchura, $altura);
//$destino = ImageCreate($anchura, $altura);
for ($i = 0; $i < count($transito); $i ++)
 ImageSetPixel($destino, $i, 0, $transito[$i]);
@imagepng($destino);
Imagedestroy($destino);
?>
En esta página se puede ver el funcionamiento: http://www.caricatos.net/inicio.html

Requiere la librería GD en versión superior a la 2.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Última edición por caricatos; 27/08/2006 a las 20:35
  #2 (permalink)  
Antiguo 10/04/2005, 03:08
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
... exelente trabajo Caricatos... aunque... el selector de color debe de funcionar??... porque temo que conmigo no lo hace... he probado con Mozilla e IExplorer y en ninguno... No por eso deja de ser exelente tu trabajo.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 10/04/2005, 08:08
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Gracias jam1138:

No sé cuando has probado el selector de colores, pero en un principio era "testimonial" y ahora es "operativo" (otro script de los que me enorgullezco, aunque sea javascript y lo esté comentando en el foro php)

Si lo has probado en un sistema con librerías GD anteriores a 2.0 te puedo asegurar que no funcionan. Se basan en el método ImageSetPixel() y aunque no genera error en versiones anteriores, no se genera el efecto deseado (creo que hay que definir una paleta o algo que no sé que hacer)

Si alguien cree que puede adaptarse a librerías anteriores de la 2.0 (GD) espero que lo proponga.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 10/04/2005, 14:27
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 10 meses
Puntos: 2
Un excelente trabajo!.

Me he quedado anonadado =P
__________________
I Love Programming...
  #5 (permalink)  
Antiguo 11/04/2005, 00:15
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Iniciado por caricatos
(...) Si lo has probado en un sistema con librerías GD anteriores a 2.0 te puedo asegurar que no funcionan. (...)
De hecho, solo lo probé en el enlace que dejaste. Se supone uno abajo selecciona los colores que quieres y da en "enviar consulta" y debe aparecer el fondo con dichos colores ¿no?... pués intenté eso y siempre me aparece con los mismos colores por Default.

Es bueno verte por acá, compartiendo tu trabajo. Saludos!
PD: en serio... DIGANME SOLO "jam"!!!!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 11/04/2005, 00:45
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
¡Je, je!

Hola jam: Creo que te falta el paso de clickear en el recuadro del color seleccionado para que se actualice la miniatura...

La verdad es que solo he puesto lo básico en la página... Y como servía para responder una pregunta javascript, http://www.forosdelweb.com/f13/color-fondo-286896/ no llegué a mejorarla...

La intención es hacer un selector de colores combinados y aún queda generar un código para incrustar en la página... yambién pretendía montarlo en un sistema de pestañas...

Bueno, cuando esté terminado, seguramente vuelva a presentarla.

P.D: jam, habitualmente pongo el nick haciendo un copy & paste, y creo que es algo habitual en muchos foreros...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 03/12/2005, 15:23
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Después de un tiempo con el proyecto algo olvidado, lo he vuelto a hacer funcionar: http://www.caricatos.net/gradientes/

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 03/12/2005, 15:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Gracias por el ejemplo Caricatos. Muy bueno.

Un saludo,
  #9 (permalink)  
Antiguo 27/08/2006, 11:55
 
Fecha de Ingreso: junio-2006
Mensajes: 329
Antigüedad: 17 años, 10 meses
Puntos: 1
Hola, ademas de felicitar al Maestro CARICATOS, de quien he leido docenas de mensajes que me han ayudados centnares de veces...

Saben como hacer transparencia de una imagen con PHP ?

Es decir, colocar Imagen pequeña SOBRE imagen GRANDE y quedar imagen PEQUEÑA con X nivel de transparencia SOBRE imagen GRANDE ?
  #10 (permalink)  
Antiguo 27/08/2006, 13:47
 
Fecha de Ingreso: junio-2006
Mensajes: 329
Antigüedad: 17 años, 10 meses
Puntos: 1
Hola,

no habia utilizado el Script, solo ahora lo he probado, cuentenme:

Es error de Código o BUG de PHP ? pos resulta que si cambio $altura por un valor > a 1, la imagen falla.

Puede ser solucionado ?
  #11 (permalink)  
Antiguo 27/08/2006, 19:50
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta

Hola Caricatos disculpa si es muy tonta mi pregunta pero exactamente que se debe poner en

Código:
%4$s

y GET["color1"]; es por $_GET["variable"]


saludos

Cita:
Iniciado por caricatos Ver Mensaje
Hola amigos:


Escribo para compartir un script para poner fondos degradados:

Código:
 <?php
header("Content-Type: image/png"); 
function elColor($color) {
 $red = 256 * 256;
 $green = 256;
 $blue = 1;
 return ($red * $color[0]) + ($green * $color[1]) + ($blue * $color[2]);
}
function losColores($arrayColores) {
 $devolver = array();
 for ($i = 0; $i < count($arrayColores); $i ++)
  $devolver[$i] = elColor($arrayColores[$i]);
 return $devolver;
}
function desglose($fondo) {
 return array(hexdec($fondo[1]),hexdec($fondo[2]),hexdec($fondo[3]));
}
function rgbColor($fondo) {
 $red = 100;
 $green = 100;
 $blue = 100;
 if( eregi( "([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})", $fondo, $retornar ) )
  return $retornar;
 else
  return array($fondo, $red, $green, $blue);
}
function transitar($color1, $color2, $pasos) {
 $devolver = array();
 $pasos--;
 $devolver[0] = desglose(rgbColor($color1));
 $devolver[$pasos] = desglose(rgbColor($color2));
 $rIni = $devolver[0][0];
 $gIni = $devolver[0][1];
 $bIni = $devolver[0][2];
 $rFin = $devolver[$pasos][0];
 $gFin = $devolver[$pasos][1];
 $bFin = $devolver[$pasos][2];
 $rMed = ($rFin - $rIni) / $pasos;
 $gMed = ($gFin - $gIni) / $pasos;
 $bMed = ($bFin - $bIni) / $pasos;
 for ($i = 1; $i < $pasos; $i ++) {
  $devolver[$i] = array($rIni + round($rMed * $i), $gIni + round($gMed * $i), $bIni + round($bMed * $i));
 }
 return losColores($devolver);
}
if (isset( 
Código:
%4$s
GET["anchura"])) $anchura =
Código:
%4$s
GET["anchura"]; else $anchura = 100; $altura = 1; if (isset(
Código:
%4$s
GET["color1"])) $color1 =
Código:
%4$s
GET["color1"]; else $color1 = "000123"; if (isset(
Código:
%4$s
GET["color2"])) $color2 =
Código:
%4$s
GET["color2"]; else $color2 = "ffabcd"; $fondo1 = desglose(rgbColor($color1)); $fondo2 = desglose(rgbColor($color2)); $transito = transitar($color1, $color2, $anchura); $destino = ImageCreateTrueColor($anchura, $altura); //$destino = ImageCreate($anchura, $altura); for ($i = 0; $i < count($transito); $i ++) ImageSetPixel($destino, $i, 0, $transito[$i]); @imagepng($destino); Imagedestroy($destino); ?>
En esta página se puede ver el funcionamiento: http://www.caricatos.net/inicio.html

Requiere la librería GD en versión superior a la 2.

Saludos
__________________
gerardo
  #12 (permalink)  
Antiguo 27/08/2006, 20:39
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Me parece que el código varió en algún traslado, pero lo acabo de editar.

Creo que no debería dar más problemas.

MonicaH: No tendría sentido un grdiente de 1 pixel... o es que no te entendí...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #13 (permalink)  
Antiguo 27/08/2006, 20:46
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
algo mas amigo caricatos, me acabo de dar cuenta que tengo gd2
creo que no va a funcionar verdad??

como puedo actualizar el gd de mi php o si sabes de algun sitio que expliquen paso a paso actualizar el gd del php

saludos

gracias
__________________
gerardo
  #14 (permalink)  
Antiguo 28/08/2006, 02:48
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Creo que tienes la librería adecuada... de todos modos, si hay algo que puede "no funcionar bien" es la línea que crea la imagen:
$destino = ImageCreateTrueColor($anchura, $altura);
... Solo abría que cambiar imageCreateTrueColor por imageCreate... pero no creo que sea necesario...

Pruébalo y nos cuentas...de todos modos, puedes bajarte los ficheros desde esta página: Gradientes (php + librerías GD) (hay que pinchar en finalizar)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #15 (permalink)  
Antiguo 28/08/2006, 06:22
 
Fecha de Ingreso: junio-2006
Mensajes: 329
Antigüedad: 17 años, 10 meses
Puntos: 1
Maestro CAricatos, me refiero a la variable $altura

El script Falla si le pedimos una imagen con altura mayor a un pixel.

Por eso pregunto:

Fallo de Código o BUG de PHP ?
  #16 (permalink)  
Antiguo 28/08/2006, 09:06
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

No termino de comprender, pero el código está preparado para un gradiente del tamaño que se pase como parámetro como longitud y solo 1 pixel de grosor (ahora no recuerdo si lo planteé como altura o anchura) lo que pasa es que para fondos degradados solo basta con 1 pixel de grosor y la longitud variable...

De todos modos voy a mirar el script (lo tengo un poco olvidado) y si encuentro algo mal lo comentaré... y desde luego, muchas gracias por el interés.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #17 (permalink)  
Antiguo 28/08/2006, 10:47
 
Fecha de Ingreso: junio-2006
Mensajes: 329
Antigüedad: 17 años, 10 meses
Puntos: 1
Si, se trata de que haz colocado el GROSOR dependiente de la var $altura, que en tu cçodigo original vale 1.

Pero en ocaciones quisieramos para otros proppositos un valor mayor a 1.

Y el Script falla con 2,5,10 o cualquier valor superior a 1.

Gracias por la atención.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:32.