Tema: FAQ's de PHP
Ver Mensaje Individual
  #134 (permalink)  
Antiguo 18/03/2005, 11:38
Avatar de Nefertiter
Nefertiter
 
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 3 meses
Puntos: 9
Sonrisa Utilizando GD para crear Efectos Dinámico PARTE 2 - Fondos

Como logro crear un fondo en degradado lineal?

Si hablamos de un fondo en degradado lineal, la respuesta es bastante simple, podemos usar el metodo line y dibujar lineas con los colores que deseemos.
Estos primeros ejemplos nos serviran para ver como podes definir colores



Código PHP:
<?php
header
("Content-type:  image/png");
//definimos el tamaño de la  imagen
$alto 60;
$ancho 150;
$im imagecreatetruecolor($ancho,$alto);
//definimos un color usando  imagecolorallocate 
$white imagecolorallocate($im255,255,255);
imagefill($im,0,0,$white);
for (
$i 0$i $alto+$i  ++){ 
/*
int imageline ( int im,  int x1, int y1, int x2, int y2, int col) 
*/ 
imageline($im0$i$ancho$i,  imagecolorallocate($im255 -  $r,255 $g ,255 -$b) ); 
$r += 3;
$g += 3;
$b += 3;

imagepng ($im);
imagedestroy($im);
?>
Ahora simplemente cambiando la manera en que los r,g,b aumentan podemos conserguir "colores" como azules por ejemplo o aleatorios
Para obtener azules:



Código PHP:
<?php
header
("Content-type:  image/png");
$alto 60;
$ancho 150;
$im imagecreatetruecolor($ancho,$alto);
$white imagecolorallocate($im255,255,255);
imagefill($im,0,0,$white);
for (
$i 0$i $alto+$i  ++){ 
imageline($im0$i,  $ancho$iimagecolorallocate($im255 $r,255 $g ,255 -$b) ); 
if(
$r 255$r  += 3;
if(
$g 255)  $g += 2;
if(
$b 255$b += 1;

imagepng ($im);
imagedestroy($im);
?>
Para conseguir aleatorios :

Código PHP:
<?php
header
("Content-type:  image/png");
$alto 60;
$ancho 150;
$im imagecreatetruecolor($ancho,$alto);
$white imagecolorallocate($im255,255,255);
imagefill($im,0,0,$white);
for (
$i 0$i $alto +1$i  ++){ 
imageline($im0$i,  $ancho$iimagecolorallocate($im255 $r,255 $g ,255 -$b) ); 
/*
int rand ( [int min [, int max]]) 
*/  
if($r 255)  $r += Rand(0,5);
if(
$g <  255$g += Rand(0,5);
if(
$b <  255$b += Rand(0,5);

imagepng ($im);
imagedestroy($im);
?>
desde ya que pueden utilizar otras maneras para obtener colores aleatorios otra opcion viendo los dos codigos anteriores es poner un rand (0,4), rand (0,3) y rand (0,2) y de esa manera obtener variantes en un color mas determinado.

Como crear un degradado lineal inclinado?

Código PHP:
<?php
header
("Content-type:  image/png");
$alto 60;
$ancho 150;
$im imagecreatetruecolor($ancho,$alto);
$white imagecolorallocate($im255,255,255);
imagefill($im,0,0,$white);
for (
$i = -($alto0.5) ; $i $alto *  1.5 $i ++){ 
imageline($im0$i$ancho$i $alto/imagecolorallocate($im255 -  $r,255 $g ,255 -$b) ); 
if(
$r 255$r += 1;
if(
$g 255$g  += 1;
if(
$b 255)  $b += 2;

imagepng  ($im);
imagedestroy($im);
?>
Como realizar un degradado circular?

La manera mas facil sin duda seria poner un serie de circulos concentricos haciendo variar el color de cada uno, para eso tenemos la funcion imagefilledellipse que nos permite crear elipces

Código PHP:
<?php
header
("Content-type:  image/png");
$alto 150;
$ancho 150;
$im imagecreatetruecolor($ancho,$alto);
$white imagecolorallocate($im255,255,255);
imagefill($im,0,0,$white);
for (
$i $i < ($ancho 2) ; $i  ++){
$radio = ($ancho  /2) - $i;
/*
bool  imagefilledellipse ( resource image, int cx, int cy, int w, int  h, int color)
*/ 
imagefilledellipse($im$ancho /2$alto /$radio$radio,imagecolorallocate($im255 $r255 $g,  255 -$b));
if(
$r <  255$r += 3;
if(
$g 255$g  += 2;
if(
$b 255)  $b += 1;

imagepng  ($im);
imagedestroy($im);
?>
a notar que todos los circulos son concentricos si esto variara podemos obtener un efecto muy "divertido" y usando colores alpha podriamos observas las superpocisiones



Código PHP:
<?php
header
("Content-type:  image/png");
$alto 150;
$ancho 150;
$im imagecreatetruecolor($ancho,$alto);
$white imagecolorallocate($im255,255,255);
imagefill($im,0,0,$white);
for (
$i $i < ($ancho 2) ; $i  ++){
$radio = ($ancho  /2) - $i;
/*definimos un  color usando imagecolorallocatealpha , que es exactamente igual a  imagecolorallocate 
salvo que recibe un parametro extra que representa su  transparencia */
imagefilledellipse($imrand(20,$ancho), rand(20,$alto) , $radio$radio,imagecolorallocatealpha($im255 $r255 $g255 -$b,75));
if(
$r 255$r  += 3;
if(
$g <  255$g += 2;
if(
$b 255$b  += 1;

imagepng ($im);
imagedestroy($im);
?>
De manera muy similar a lo anterior se puede responder a la pregunta de como hacer un degradado cuadrado, y seria poniendo un seria de cuadrados concentricos y ir cambiandolos de color y para esto tenemos imagerectangle






Código PHP:
<?php
header
("Content-type:  image/png");
$alto 150;
$ancho 150;
$im imagecreatetruecolor($ancho,$alto);
$white imagecolorallocate($im255,255,255);
imagefill($im,0,0,$white);
for (
$i $i $ancho $i  ++){
/*
int imagerectangle ( int  im, int x1, int y1, int x2, int y2, int col) 
dibuja los bordes de un  rectangulo con coordenas de diagoan x1,y1 - x2y, y2 
*/ 
imagerectangle ($im$i ,$i $ancho $i ,  $alto $iimagecolorallocate($im255 $r,  255 $g255 -$b));
if(
$i == 0$r  += 3;
if(
$i == 0)  $g += 2;
if(
$b 255$b += 1;

imagepng ($im);
imagedestroy($im);
?>
Si quisieramos volver a hacer ese efecto "divertido" que usamos con los circulos tendriamos que usar imagefilledrectangle algo asi

Código PHP:
<?php
header
("Content-type:  image/png");
$alto 150;
$ancho 150;
$im imagecreatetruecolor($ancho,$alto);
$white imagecolorallocate($im255,255,255);
imagefill($im,0,0,$white);
for (
$i  $i $ancho $i ++){
/*
int  imagefilledrectangle ( int im, int x1, int y1, int x2, int y2,  int col) 
*/ 
imagefilledrectangle ($imrand(0,$ancho-50) ,rand(0,$ancho-50) , rand(30,$ancho) ,rand(30,$ancho), imagecolorallocatealpha($im255 $r255 $g255 -$b,90));
if(
$i == 0$r  += 3;
if(
$i == 0)  $g += 2;
if(
$b 255$b += 1;

imagepng ($im);
imagedestroy($im);
?>


nos quedaria pendiente como realizar fondo en degradado conicos

Última edición por Nefertiter; 18/03/2005 a las 11:41