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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
< ?php /** Debemos usar imagecopyresampled() en lugar de imagecopy() ya que las imagenes transparentes van a rellenar su canal alpha con negro... */ //tomamos la imagen "base" $tapa_caratula = imagecreatefrompng("tapa_caratula.png"); // Creamos las dos imágenes a utilizar $caratula_base = imagecreatefrompng("caratula_base.png"); $icono = imagecreatefrompng("icono.png"); // 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.png"); // Destruimos las imágenes imagedestroy($tapa_caratula); imagedestroy($caratula_base); imagedestroy($icono); |
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.
¡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.
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
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);
Muy buena Info colega, pero no funciona el link del demo. Voy a intentar con las lineas arriba, haber si me sale.
Saludos.
Funciona de diez !!!
Muchas Gracias !!!
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.
Fue de gran ayuda tu post. Es fácil de entender y aplicar, muchas gracias.
Hola, los links de descarga no funcionan, alguien los tiene? Gracias