Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: multi-media asdfg en 6 Agosto 2011, 04:49 am



Título: Como realizar lo siguiente con GD
Publicado por: multi-media asdfg en 6 Agosto 2011, 04:49 am
Hola,

Quiero hacer lo siguiente con GD:

(http://3.bp.blogspot.com/_nsxA5UWVCUY/TDRYZX9_yKI/AAAAAAAAAXk/0x2Ei77o8N4/s1600/maximas+andalucia+7-7.jpg)


Básicamente seria establecer una serie de puntos y de estos que salga el color como lo hace en la imagen, pero no se con que función de GD hacer esto y mucho menos como asociarlo a una regla de colores.

Alguien me puede aconsejar ?


Título: Re: Como realizar lo siguiente con GD
Publicado por: multi-media asdfg en 8 Agosto 2011, 23:01 pm
Otra pregunta sobre el tema seria como hacer un degradado entre dos o mas puntos.


Título: Re: Como realizar lo siguiente con GD
Publicado por: Shell Root en 9 Agosto 2011, 00:51 am
:http://www.digitalestudio.es/programacion/dibujar-degradados-con-php-y-gd/


Título: Re: Como realizar lo siguiente con GD
Publicado por: multi-media asdfg en 10 Agosto 2011, 13:57 pm
No consigo poner el funcionamiento ni el código que proponen en la web.

El caso es, si no hay manera sencilla de hacer dos elipses y entre estas crear el degradado...

Esto es lo que yo llego a hacer... superponer dos elipses, pero queda ese corte.

(http://img88.imageshack.us/img88/11/capturazv.png)

Por eso lo que decia antes degradado entre las dos elipses y no superponiéndolo.

Es posible ?


Título: Re: Como realizar lo siguiente con GD
Publicado por: multi-media asdfg en 13 Agosto 2011, 14:10 pm
Alguna idea ?

Dejo el código que he usado en la imagen anterior:

Código
  1. <?php
  2.  
  3. header( "Content-type: image/gif" );
  4.  
  5. $imagen = imagecreatefrompng('tras.png');
  6.  
  7.  
  8. $morado = array( 'r' => 186, 'g' => 0, 'b' => 255 );
  9. $amarillo = array( 'r' => 255, 'g' => 220, 'b' => 0 );
  10.  
  11. $pasos = 2000;
  12.  
  13. $incr_r = ( $amarillo['r'] - $morado['r'] ) / $pasos;
  14. $incr_g = ( $amarillo['g'] - $morado['g'] ) / $pasos;
  15. $incr_b = ( $amarillo['b'] - $morado['b'] ) / $pasos;
  16.  
  17. // El centro de la imagen será el del gradiente
  18. $cx = imagesx( $imagen ) / 3;
  19. $cy = imagesy( $imagen ) / 3;
  20. = imagesx( $imagen ) / 2;
  21. $k = imagesy( $imagen ) / 3;
  22.  
  23. // Ancho y alto del gradiente inicial
  24. $ancho = 240;
  25. $alto = 140;
  26.  
  27. // Valores de reducción del elipse
  28. $incr_x = $ancho / $pasos;
  29. $incr_y = $alto / $pasos;
  30.  
  31. $r = $morado['r'];
  32. $g = $morado['g'];
  33. $b = $morado['b'];
  34.  
  35. // Dibujamos las elipses según los pasos
  36. for( $i = 10; $i < $pasos; $i++ ){
  37. $color = imagecolorallocate( $imagen, $r, $g, $b );
  38. imagefilledellipse( $imagen, $cx, $cy, $ancho, $alto, $color );
  39. imagefilledellipse( $imagen,, $k, $ancho, $alto, $color );
  40.  
  41. $r += $incr_r;
  42. $g += $incr_g;
  43. $b += $incr_b;
  44. // Reducimos el tamaño de la siguiente elipse
  45. $ancho -= $incr_x;
  46. $alto -= $incr_y;
  47. }
  48.  
  49. imagegif( $imagen );
  50.  
  51. imagedestroy( $imagen );
  52.  
  53. ?>


Título: Re: Como realizar lo siguiente con GD
Publicado por: bomba1990 en 14 Agosto 2011, 01:59 am
hola, y si usas colores alpha y le ds un poco de opacidad??

http://php.net/manual/es/function.imagecolorallocatealpha.php

en el modo por defecto el hace una mezcla de colores interesante qu ete podria servir.


Título: Re: Como realizar lo siguiente con GD
Publicado por: bomba1990 en 14 Agosto 2011, 06:38 am
Sobre la barra de colores aqui te dejo un ejemplo que hice ahorita rapidamente es vertical no horizontal, despues lo mejorare, pero quizas te puede servir:

Código
  1. <?php
  2. $colores=255;
  3. $saltos=1;
  4. $lineas=1;
  5.  
  6.  
  7. $repeticiones=$colores/$saltos;
  8. $imagen = imagecreatetruecolor(100,(5*$lineas*$repeticiones));
  9. imagefill($imagen,0,0,imagecolorallocatealpha($imagen,255,255,255,0));
  10. //imagefilledrectangle($imagen, 4, 4, 50, 25, imagecolorallocatealpha($imagen,10,255,255,0));
  11. $color=array(
  12. 'image'=>'',
  13. 'a'=>1,
  14. '1'=>$colores,
  15. '2'=>0,
  16. '3'=>0
  17. );
  18. for($z=0;$z<=5;$z++){
  19. for($i=0;$i<255;$i+=$saltos){
  20.  
  21. $x=$i*$repeticiones/$colores;
  22. if( $z%2==0 ){
  23. $a=($color['a']==3)?1:$color['a']+1;
  24. $color[$a]=$i;
  25. }else{
  26. $color[$color['a']]=$colores-$i;
  27. }
  28.  
  29. if($z%2==1 && $i>=254 && $color['a'] < 3){$color['a']+=1;}
  30. elseif($z%2==1 && $i==255 && $color['a']==3 ){$color['a']=1;}
  31.  
  32. $color['image']=imagecolorallocate($imagen,$color['1'],$color['2'],$color['3']);
  33. imagefilledrectangle($imagen,0,($z*$lineas*$repeticiones)+$x,100,($z*$lineas*$repeticiones)+$x+$lineas,$color['image']);
  34. }
  35. }
  36.  
  37. header( "Content-type: image/png" );
  38. imagepng( $imagen );
  39.  
  40. imagedestroy( $imagen );
  41.  
  42. ?>
  43.  

Resultado:
(http://www.freeimagehosting.net/t/40bb3.jpg) (http://www.freeimagehosting.net/40bb3)


Para la imagen del mapa, seria bueno que tuvieras una vacia(sin colores), para hacer pruebas ensima de ella.


Título: Re: Como realizar lo siguiente con GD
Publicado por: multi-media asdfg en 17 Agosto 2011, 16:32 pm
Muchas gracias bomba1990.

Últimamente he estado pensando que quizás sea mejor hacer los degradados con polígonos en lugar de elipses.