Combinar varias imágenes PNG transparentes con PHP GD2

Me toca hacer un script que tome 3 imágenes y las combine mediante PHP  y la librería GD para ir creando imágenes personalizadas para cada producto en un proyecto de mi trabajo.
La gracia de esto viene a ser que hay una imagen sólida y las 2 que se apilan son PNG transparentes.

Descargar Ejemplo

9 Comments

  • Victor 09/07/2010

    Hola master estaba probando tu codigo pero no me muestra las imagenes, no se si puedes aclarar la parte de la ruta de la imagenes, tal vez ahi esta el problema, lo probe y no me funka, seria de gran ayuda.
    Desde ya muchas gracias.

  • Jonathan 18/11/2010

    ¡Muchísimas gracias, super útil!

    Victor, debes establecer tus permisos del folder en 777 (lee las instrucciones que vienen dentro del PHP ahí dice que genera una imagen llamada “salida.png”.

    Si quieres ver el resultado al final agrega - header(“Location: salida.png”); - al final del código.

  • Maxi 16/12/2010

    Hola como aplicarias las variables GET a este codigo como para que despues en base a una planilla funcione? osea me imaginaba una planilla donde se puedan elegir diferentes tapas e imagenes para ir armandola, no se si me explico. Gracias

    • obxesion 23/07/2012

      Excelente pregunta aca la facil respuesta 😛 !!

      Primero definimos las variables:

      //Variables Definidas Para $_GET, Especifiquemos en la url la extencion de la imagen
      $_tapa=$_GET[‘tapa’]; //Tapa
      $_base=$_GET[‘base’]; // Base
      $_icono=$_GET[‘icono’]; // icono
      $_salida=”salida.png”; // Nombre del Archivo Final
      //tomamos la imagen “base”
      $tapa_caratula = imagecreatefrompng($_tapa);

      // Creamos las dos imágenes a utilizar
      $caratula_base = imagecreatefrompng($_base);
      $icono = imagecreatefrompng($_icono);

      // Copiamos una de las imágenes sobre la otra.
      // imagecopyresampled( “img_origen”, “imagen_que_nueva”, pos x imagen_que_nueva, pos y imagen_que_nueva, pos_x_img_origen, pos_y_img_origen, largo_para_imagen_nueva, ancho_para_imagen_nueva, largo_para_imagen_origen, largo_para_imagen_origen);
      imagecopyresampled(
      $tapa_caratula,
      $caratula_base,
      0,
      0,
      0,
      0,
      imagesx($caratula_base),
      imagesy($caratula_base),
      imagesx($caratula_base),
      imagesy($caratula_base)
      );

      imagecopyresampled(
      $tapa_caratula,
      $icono,
      (imagesx($caratula_base) / 2) - (imagesx($icono) / 2) + 10,
      80,
      0,
      0,
      imagesx($icono),
      imagesy($icono),
      imagesx($icono),
      imagesy($icono)
      );

      // Damos salida a la imagen final a un archivo
      imagepng($tapa_caratula, $_salida);

      // Destruimos las imágenes
      imagedestroy($tapa_caratula);
      imagedestroy($caratula_base);
      imagedestroy($icono);

  • Jorge 28/09/2012

    Muy buena Info colega, pero no funciona el link del demo. Voy a intentar con las lineas arriba, haber si me sale.

    Saludos.

  • Gonzalo 16/11/2012

    Funciona de diez !!!
    Muchas Gracias !!!

  • Roger Gonzales 23/11/2012

    Hola Colega informático.

    Me sirvió de mucho tu post. Es fácil de entender y aplicar.

    Para algunos que intenten hacer pruebas con imágenes no se olviden especificar el tipo de imagen.

    Si mandan un JPG tienen que usar la función imagecreatefromjpeg
    O si usan un PNG tienen que poner la función imagecreatefrompng
    etc…

    gracias.

  • ezequiel 25/03/2013

    Fue de gran ayuda tu post. Es fácil de entender y aplicar, muchas gracias.

  • Alex 30/09/2015

    Hola, los links de descarga no funcionan, alguien los tiene? Gracias

:).