Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/05/2011, 18:48
LhaN
 
Fecha de Ingreso: septiembre-2008
Mensajes: 148
Antigüedad: 15 años, 7 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.