Foros del Web » Programando para Internet » PHP »

Problema con generación de imagenes GD

Estas en el tema de Problema con generación de imagenes GD en el foro de PHP en Foros del Web. Estoy viendo por primera vez la generación de imagenes GD y he conseguido generar una imagen tipo código captcha. Este código me funciona perfectamente: @import ...
  #1 (permalink)  
Antiguo 08/02/2014, 21:51
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Problema con generación de imagenes GD

Estoy viendo por primera vez la generación de imagenes GD y he conseguido generar una imagen tipo código captcha.

Este código me funciona perfectamente:

Código PHP:
Ver original
  1. $imagen = imagecreatetruecolor(130,30); // creamos imagen 130,30
  2. $blanco = imagecolorallocate($imagen,255,255,255); // creamos el color blanco
  3. $negro = imagecolorallocate($imagen,0,0,0); // creamos color negro
  4. imagefill($imagen, 0, 0, $blanco);//llenamos el fondo de blanco
  5. imagestring($imagen, 5, 35, 6, mt_rand(10000,99999),$negro); // creamos string
  6. header('Content-type: image/png');
  7. imagepng($imagen);
  8. imagedestroy($imagen);

Ahora le he intentado añadir un script que tenía hecho de hace unos días el cual general un código aleatorio, formado por Mayusculas minúsculas y numeros ( quité los signos para el captcha ) pero la cuestión es que en vez de añadir en el imagenstring el mt_rand, llamo a la función que muestra el código llamada cadena() pero la imagen que genera está totalemente en blanco sin el string.

pego el código:

Código PHP:
Ver original
  1. <?php
  2. function cadena() {
  3. $cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  4. $cadena .= "abcdefghijklmnopqrstuvwxyz";
  5. $cadena .= "1234567890";
  6. $aleatoria = array();
  7. for($i=0;$i<5;$i++) {
  8. $aleatoria[] = $cadena[mt_rand(0,strlen($cadena))];
  9. str_shuffle($cadena); }
  10. foreach($aleatoria as $datosAleatoria) {
  11. echo $datosAleatoria; }
  12. }
  13.  
  14. $imagen = imagecreatetruecolor(130,30); // creamos imagen 130,30
  15. $blanco = imagecolorallocate($imagen,255,255,255); // creamos el color blanco
  16. $negro = imagecolorallocate($imagen,0,0,0); // creamos color negro
  17. imagefill($imagen, 0, 0, $blanco);//llenamos el fondo de blanco
  18. imagestring($imagen, 5, 35, 6, cadena(),$negro); // creamos string
  19. header('Content-type: image/png');
  20. imagepng($imagen);
  21. imagedestroy($imagen);
  22. ?>

Lo primero que he pensado es que la función cadena() estaría mal pero la he probado y funciona perfectamente.

conclusión, si pongo en el imagestring un string directo "ejemplo" o un mt_rand(x,x) me funciona pero si añado el llamamiento a cadena() no funciona

¿ Pueden echarme un cable ? Gracias de antemano
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #2 (permalink)  
Antiguo 09/02/2014, 02:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con generación de imagenes GD

Lo que pasa es que en la función cadena() estás haciendo un echo en lugar de retornar la cadena que usará imagestring() para agregarla a la imagen.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 09/02/2014, 05:15
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Problema con generación de imagenes GD

He cambiado:

Código PHP:
Ver original
  1. echo $datosAleatorio;

por

Código PHP:
Ver original
  1. return $datosAleatorio;

Y ahora si que muestra algo en la imagen, pero solo el primer caracter de la cadena

EDITO: he conseguido que genere toda la string en la imagen pero tuve que quitar el foreach y declarar una variable y asignarle uno a uno cada posición de la array, se a no es la mejor solución pero ha sido efectiva por el momento.

Estoy mirando mas funciones de GD, en cuanto tenga más dudas sobre alguna lo añadiré en este hilo

EDITO: sigo avanzando y he creado la siguiente imagen con algunas figuras también algo aleatorias

Ver ejemplo en vivo aqui

El código:

Código PHP:
Ver original
  1. <?php
  2. //function cadena() {
  3. $cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  4. $cadena .= "abcdefghijklmnopqrstuvwxyz";
  5. $cadena .= "1234567890";
  6. $aleatoria = array();
  7. for($i=0;$i<6;$i++) {
  8. $aleatoria[] = $cadena[mt_rand(0,strlen($cadena))];
  9. str_shuffle($cadena); }
  10. //foreach($aleatoria as $datosAleatoria) {
  11. $codigo = $aleatoria[0] . $aleatoria[1] . $aleatoria[2] . $aleatoria[3] . $aleatoria[4] . $aleatoria[5];
  12. //}
  13.  
  14. $imagen = imagecreatetruecolor(130,30); // creamos imagen 130,30
  15. $blanco = imagecolorallocate($imagen,255,255,255); // creamos el color blanco
  16. $negro = imagecolorallocate($imagen,0,0,0); // creamos color negro
  17. $rosa = imagecolorallocate($imagen, 255, 105, 180); // creamos color rosa
  18. $verde = imagecolorallocate($imagen, 132, 135, 28); // creamos color verde
  19. imagefill($imagen, 0, 0, $blanco);//llenamos el fondo de blanco
  20. imagestring($imagen, 5, 35, 6, $codigo,$negro); // creamos string
  21. imagerectangle($imagen, rand(20,45), rand(17,27), rand(75,120), rand(5,17), $rosa); // creamos un rectangulo
  22. imagerectangle($imagen, rand(20,45), rand(17,27), rand(75,120), rand(5,17), $verde); // creamos un rectangulo
  23. header('Content-type: image/png');
  24. imagepng($imagen);
  25. imagedestroy($imagen);
  26.  
  27. ?>

Me he fijado que si tengo la imagen abierta con el navegador y abro otra pestaña y entro de nuevo, me aparece el mismo código de la ventana anterior, lo he probado desde el movil solamente. También he probado con otra persona desde otro pc y ahí no pasa.

Es algo que se debería resolver?
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 09/02/2014 a las 09:43
  #4 (permalink)  
Antiguo 09/02/2014, 19:31
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con generación de imagenes GD

Antes de enviar la imagen, dile al navegador que no la almacene en caché:

Código PHP:
Ver original
  1. header("Cache-Control: no-cache, must-revalidate");
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 09/02/2014, 20:06
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Problema con generación de imagenes GD

como siempre @triby .. Mil gracias!!! se soluciona a la perfección
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Etiquetas: imagenes
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:49.