Foros del Web » Programando para Internet » PHP »

Un problema con GD (imagen negra)

Estas en el tema de Un problema con GD (imagen negra) en el foro de PHP en Foros del Web. Buenas, estaba investigando un poco el uso de GD y se me ocurrió armar una imagen a partir de una serie de tiles (imágenes mas ...
  #1 (permalink)  
Antiguo 01/05/2011, 18:48
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Un problema con GD (imagen negra)

Buenas, estaba investigando un poco el uso de GD y se me ocurrió armar una imagen a partir de una serie de tiles (imágenes mas pequeñas). Pero tengo un error en el código que hace que la imagen resultante sea toda negra.
Aquí el código:
Código PHP:
Ver original
  1. <?php
  2. //phpinfo(INFO_MODULES);//Para ver si GD esta instalado
  3. /**
  4. Debemos usar imagecopyresampled() en lugar de imagecopy() ya
  5. que las imagenes transparentes van a rellenar su canal
  6. alpha con negro...
  7.  */
  8.  
  9. //tomamos la imagen "base"
  10. $sizeX=2;
  11. $sizeY=2;
  12. $tile=imagecreatefrompng("tierra.png");
  13. $mapa=imagecreatetruecolor($sizeX*imagesx($tile),$sizeY*imagesy($tile));
  14.  
  15. // Creamos las dos imágenes a utilizar
  16. for($x=0;$x<$sizeX;$x++)
  17.     for($y=0;$y<$sizeY;$y++){
  18.         switch(rand(1,6)){
  19.             case 1: $tile=imagecreatefrompng("curva.png"); break;
  20.             case 2: $tile=imagecreatefrompng("recta.png"); break;
  21.             case 3: $tile=imagecreatefrompng("cruce.png"); break;
  22.             case 4: $tile=imagecreatefrompng("empalme.png"); break;
  23.             case 5: $tile=imagecreatefrompng("esquina.png"); break;
  24.             case 6: $tile=imagecreatefrompng("tierra.png"); break;
  25.         }
  26.         imagecopyresampled( //Copia del origen y la pega en el destino
  27.             $tile, //Imagen origen, a copiar o parte de ella
  28.             $mapa, //Imagen destino, donde se pega
  29.             0, //Origen x del rectangulo a copiar de la imagen origen
  30.             0, //Origen y del rectangulo a copiar de la imagen origen
  31.             $x*imagesx($tile), //Origen x del rectangulo a pegar de la imagen destino
  32.             $y*imagesy($tile), //Origen y del rectangulo a pegar de la imagen destino
  33.             imagesx($tile), //Ancho del rectangulo a copiar de la imagen origen
  34.             imagesy($tile), //Alto del rectangulo a copiar de la imagen origen
  35.             imagesx($tile), //Ancho del rectangulo a copiar de la imagen destino
  36.             imagesy($tile) //Alto del rectangulo a copiar de la imagen destino
  37.         );
  38.     }
  39. imagepng($mapa, "salida".rand(0,100000).".png");// Damos salida a la imagen final a un archivo
  40.  
  41. // Destruimos las imágenes
  42. imagedestroy($mapa);
  43. imagedestroy($tile);
  44. ?>

Desde ya gracias.
  #2 (permalink)  
Antiguo 01/05/2011, 19:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Un problema con GD (imagen negra)

Muestra todos los errores, usa algo como
Código PHP:
Ver original
  1. <?php
Al principio de todo código y verifica a ver si te trae algún error en específico.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 01/05/2011, 19:49
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: Un problema con GD (imagen negra)

Rand 2
Para X=0 e Y=0: Error despues de switch imagecreatefrompng 32767
Para X=0 e Y=0: Error despues de imagecopyresampled 30719
Rand 4
Para X=0 e Y=1: Error despues de switch imagecreatefrompng 30719
Para X=0 e Y=1: Error despues de imagecopyresampled 30719
Rand 6
Para X=1 e Y=0: Error despues de switch imagecreatefrompng 30719
Para X=1 e Y=0: Error despues de imagecopyresampled 30719
Rand 4
Para X=1 e Y=1: Error despues de switch imagecreatefrompng 30719
Para X=1 e Y=1: Error despues de imagecopyresampled 30719

Te sugieren algo esos errores?
  #4 (permalink)  
Antiguo 01/05/2011, 20:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Un problema con GD (imagen negra)

Muestra el error como te lo da PHP...
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 01/05/2011, 20:05
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: Un problema con GD (imagen negra)

Le meti los echo con los mensajes esos y el error_reporting(E_ALL) al final del mensaje dentro del switch y me largo eso. Si lo pongo al principio no me muestra nada...

PD: tengo poca idea de php... así que ni idea que o como funciona el error_reporting
  #6 (permalink)  
Antiguo 01/05/2011, 22:28
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 16 años, 2 meses
Puntos: 10
Respuesta: Un problema con GD (imagen negra)

Ya lo resolvi, el problema era que puse los parametros al reves en la funcion imagecopyresampled, primero es la dst_image, src_image, y lo mismo los demas parametros intercalando dst src dst src de a pares.

Código PHP:
Ver original
  1. imagecopyresampled( //Copia del origen y la pega en el destino
  2.     $mapa, //Imagen destino, donde se pega
  3.     $tile, //Imagen origen, a copiar o parte de ella
  4.     $x*imagesx($tile), //Origen x del rectangulo a pegar de la imagen destino
  5.     $y*imagesy($tile), //Origen y del rectangulo a pegar de la imagen destino
  6.     0, //Origen x del rectangulo a copiar de la imagen origen
  7.     0, //Origen y del rectangulo a copiar de la imagen origen
  8.     imagesx($tile), //Ancho del rectangulo a pegar en la imagen destino
  9.     imagesy($tile), //Alto del rectangulo a pegar en la imagen destino
  10.     imagesx($tile), //Ancho del rectangulo a copiar de la imagen origen
  11.     imagesy($tile) //Alto del rectangulo a copiar de la imagen origen
  12. );

Etiquetas: negra
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 11:17.