Imagen Dinamica en PHP (Imagen dentro de otra)

Publicado por demono, Agosto 02, 2007, 02:38:11

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

demono

Hola a todos!
Estoy laburando con imagenes dinamicas en PHP y estoy buscando alguna forma de partiendo de un fondo de una imagen (Esto pude hacerlo sin drama) ir insertandole imagenes sobre la misma.

Un ejemplo sería algo asi:
http://www.mzimage.com/image.php?lang=en&design=1:000000:000000:::&player=Erasmo%20Dunixi:::28::&atts=8:6:4:7:1:1:0:9:9:6:5:10:9&mzv=false

En el ejemplo el fondo está separado de las pelotitas y la idea mia es hacer algo parecido pero enfocado a otro tipo de imagenes (Algo asi como un perfíl de usuario quería hacer). Lo que quiero hacer es que tome los valores desde el GET y ahi interprete y inserte la imagen correspondiente (Que sería en el caso del ejemplo la que tiene esa cantidad de pelotitas).

Estuve buscando por google y no encontré nada parecido asi que agradeceria si algun argento me ayudara  :-[ :-[

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Predicador

Hola, aca te arme un scriptcito ejemplo de como crear imagenes y como insertar imagenes dentro de una imagen creada.
En este ejemplo, la ides es que recibe un parametro ($veces, que es la cantidad de veces que la pelota se va a repetir) y genera una imagen de salida:
Código ("pelotear.php") [Seleccionar]
<?
# recibe a $veces como parametro de entrada

if ((is_numeric($veces)) && ($veces < 10) && ($veces > 0))  {
  header("Content-type: image/jpg");

  # cargamos la pelota y obtenemos sus dimensiones
  $imgPelota = imagecreatefromjpeg("pelotita.jpg");
  $pelotax = imagesx($imgPelota);
  $pelotay = imagesy($imgPelota);

  # preparamos la imagen de salida
  $imgWidth = $pelotax * $veces;
  $imgHeight = $pelotay;
  $image = imagecreate($imgWidth, $imgHeight);

  # ponemos fondo blanco
  $colorWhite = imagecolorallocate($image, 255, 255, 255);
  ImageFill($image, 0, 0, $colorWhite);

  $dst_y = 0; // posicion vertical en pixels
  for ($i = 0; $i < $veces; $i+= 1) { // copiamos varias veces la pelotita
    imagecopy($image, $imgPelota, $i * $pelotax, $dst_y, 0, 0, $pelotax, $pelotay);
  }
  # devolvemos la imagen y liberamos memoria
  ImageJPEG ($image, NULL, 95);
  imagedestroy($image);
}else{
  echo "Error en la cantidad de pelotas (que pelotudo!).";
}
?>

Es muy facil de seguir.
Podes ver como funciona aca.
Para saber todas las funciones que tenes relacionadas a tatamiento de imagenes (poner un texto, dibujar lineas, etc), no hay mejor referencia que la misma pagina de PHP, aca: http://es.php.net/gd
De por si, para poder hacer esto necesitas que tu server este preparado con la libreria GD (podes probarlo y si no te anda quejarte jejee).
Baii
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

Camello_AR

Bien ahi predi. Aclará que las pelotas va de 1 a 9 (tuve que leer el código para darme cuenta que pasaba que 10 no andaba  :P  ::) )

Predicador

Lo limite por que no le veia sentido que creen una imagen con 10 mil pelotas, pero si estoy de acuerdo que deberia haber sido mas explicito en el mensaje de error :P
Baii
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

demono

Ya logré "meter" dentro del fondo la imagen pero en lugar de las imagenes me sale un cuadrado negro de la misma medida del PNG de las pelotitas (Hasta con la cantidad que yo queria!). Tampoco estoy pudiendo moverlo del margen ni cambiando el numero en X (con Y si puedo moverlo horizontalmente).



Código ("img2.php") [Seleccionar]
<?
Header("Content-type: image/png");

$imgfondo = imagecreatefromPng("fondo.png");
$imgPelota = imagecreatefromPng("pelotita.png");
$pelotax = imagesx($imgPelota);
$pelotay = imagesy($imgPelota);


$dst_y = 25; // posicion vertical en pixels
$dst_x = 100; // posicion vertical en pixels
$cantidadpelota = 2;
$veces = 10;
$image = imagecreate(212, 212);
$colorWhite = imagecolorallocate($image, 255, 255, 255);
ImageFill($image, 0, 0, $colorWhite);


for ($i = 0; $i < $veces; $i++) { // copiamos varias veces la pelotita
    imagecopy($imgfondo, $imgPelota, $i * $pelotax, $dst_y, $dst_x, 0, 12, 10);
imagecopy($image, $imgPelota, $i * $pelotax, $dst_y, $dst_x, 0, 12, 10);
  }



ImagePng($imgfondo);
imagedestroy($imfondo);
?>



Estoy haciendo todo muy mal?  :-[



La URL de lo que estoy armando es:
http://www.mzarg.com.ar/imagemaker/img2.php

La URL de la pelotita es:
http://www.mzarg.com.ar/imagemaker/pelotita.png

La URL del fondo es.
http://www.mzarg.com.ar/imagemaker/fondo.png



Si, lo sé....soy un pelotudo!  :lol:

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Camello_AR

cambia de png a jpg y probá

PD: No puede hacer arrancar el php (con img2.php?veces=X)

demono

Tampoco pude hacerlo  :-\
Me la juego a que hay algun error boludo en el código y no logro decifrar cual es  :'( :'( :'(

Tampoco se corre del margen asi que eso también me genera ciertas dudas sobre el código...

CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock

Predicador

#7
hola, en si luego de las modificaciones quedaron varias cosas que no era necesario que queden y se agregaron cosas que no eran necesario agregarlas, por ende hice lo que querias hacer:
<?
# recibe a $veces como parametro de entrada
# by Predicador

if ((is_numeric($veces)) && ($veces < 11) && ($veces > 0))  {
  header("Content-type: image/jpg");

  # cargamos la pelota y obtenemos sus dimensiones
  $imgPelota = imagecreatefrompng("pelotita.png");
  $pelotax = imagesx($imgPelota);
  $pelotay = imagesy($imgPelota);

  # preparamos la imagen de salida basada en un fondo
  $image = imagecreatefrompng("fondo.png");
 
  # posicion inicial de las pelotas
  $deltax = 20; // posicion horizontal inicial desde el margen izquierdo
  $deltay = 50; // posicion vertical en pixels
   
  for ($i = 0; $i < $veces; $i+= 1) {
    imagecopy($image, $imgPelota, $deltax + ($i * $pelotax), $deltay, 0, 0, $pelotax, $pelotay);
  }
  # devolvemos la imagen y liberamos memoria
  Imagepng($image);
  imagedestroy($image);
}else{
  echo "Error en la cantidad de pelotas (que pelotudo!).";
}
?>

La idea es que ahora trabaja con PNG; podes modificar $deltax y $deltay que son las posiciones inciales; si queres que siempre haga un numero fijo de pelotas entonces debes poner $veces = numero, sino podes mandar a veces como parametro; quizas lo unico que quedaria por hacer es modificar el pelota.png y definirle un fondo transparente.
Baii ;)


EDIT: me habia olvidado de decirles, que pueden ver el resultado aca.
En la mayoría de las comunidades online el 90% de los usuarios son mirones que nunca contribuyen, el 9% contribuyen un poco y el 1% son los responsables de casi toda la acción. Nielsen

demono


CPU X2 7750 | 2x1GB DDR2 800Mhz OCZ | VGA MSI 9600GT OC | Power Supply Powercooler Type R Modular 550w | 2x320GB HDD WD Caviar | Gabinete VTB Rock