Imagenes con transparencia con GD2 en PHP

3 de Octubre - en PHP

La librería GD que incorpora PHP contiene diversas funciones para la manipulación de imágenes y generación de gráficos, además de tener una fácil implementación, esta librería esta preinstalada en cualquier versión de PHP. En este tutorial veremos algunas formas para el tratamiento de imágenes específicamente con transparencia o canal alfa.

Cargar una imagen  con GD

Cuando carguemos una  imagen con GD es necesario utilizar la función específica para cada formato,  de lo contrario nos arrojaría errores por incompatibilidad de formatos

//Cargando una imagen con formato PNG
$image1 = imagecreatefrompng('imagen.png');
           
//Cargando una imagen con formato GIF
$image2 = imagecreatefromgif('imagen.gif');     

//Cargando una imagen con formato PNG
$image3 = imagecreatefromjpeg('imagen.jpg');

Creando un lienzo con transparencia en PHP

Para crear un espacio transparente partiremos utilizando la función imagecreatetruecolor  el cual creara un lienzo totalmente negro, se ahí sustituiremos este color por uno transparente.

//Creamos un lienzo de color negro con la dimensiones de 300x300 pixeles
$imagen = imagecreatetruecolor(300, 300);

//Indicamos que la $imagen tendra el canal alfa activo
imagesavealpha($imagen, true);

//Generamos un color 100% transparente
//en este caso el numero 127 indica el valor mínimo de opacidad o 100% transparencia

//Tambien podremos entrablecer una transparencia media modificando el cuarto valor entre un rango de 0 a 127
$alpha = imagecolorallocatealpha($imagen, 0, 0, 0, 127);

//Rellenamos a $imagen con el color $alpha, de este modo tendremos un lienzo transparente
imagefill($imagen, 0, 0, $alpha);

Ahora ya podremos trabajar sobre este lienzo, dibujando sobre el o agregando imágenes, para guardar la imagen y que esta conserve la transparencia es necesario utilizar el formato PNG y la función imagepng;

//definimos el color negro
$color = imagecolorallocate($imagen, 0, 0, 0);

//Escribir uan cadena de texto en el lienzo en las coordenadas 0, 0
imagestring($imagen, 100, 0, 0, 'Devlaz.com', $color);

//Guardamos la imagen especificando la ruta
imagepng($imagen, 'ejemplo.png');
              
//Liberamos la memoria
imagedestroy($imagen);

 Resultado:Texto con GD en PHP

Combinando 2 imágenes con transparencia

Para este ejemplo combinaremos 2 imágenes con formato PNG, con una resolución igual de 128x128px, la imagen resúltate será de 256x128px:

Imagenes con transparencia en PHP

 

Utilizaremos un lienzo base el cual contendrá las 2 imágenes, para copiar dichas imágenes al lienzo utilizaremos la función imagecopy, sus parámetros son

Imagecopy(Destino, Origen, XDestino, YDestino, XOrigen, YOrigen, WOrigen, HOrigen);
  1. Destino: donde se copiara la imagen.
  2. Origen: imagen a copiar
  3. Xdestino: coordenada X de destino.
  4. Ydestino: coordenada y de destino.
  5. XOrigen: Coordenada X del fragmento a copiar de la imagen de origen.
  6. YOrigen: Coordenada Y del fragmento a copiar de la imagen de origen.
  7. WOrigen: Largo del fragmento a copiar de la imagen de origen.
  8. HOrigen: Ancho del fragmento a copiar de la imagen de origen.
//Cargamos la dos imagenes ambas de 128x128px
$img1 = imagecreatefrompng('img1.png');
$img2 = imagecreatefrompng('img2.png');

//Creamos el lienzo con el tamaño para contener las 2 imagenes, y le asignamos transparencia
$image = imagecreatetruecolor(256, 128);
imagesavealpha($image, true);
$alpha = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $alpha);

//Colocamos la primera imagen en las coordenadas 0, 0 px
imagecopy($image, $img1, 0, 0, 0, 0, 128, 128);

//Colocamos la segunda imagen en las coordenadas 128, 0 px
imagecopy($image, $img2, 128, 0, 0, 0, 128, 128);

//Guardamos y leberamos el objeto
imagepng($image, 'ejemplo2.png');
imagedestroy($image);

Resultado:

combinar imagenes en PHP

 

Colocar una marca de agua a una imagen en PHP

Una técnica útil en GD, es colocar marcas de agua a imágenes, ya sea texto u otra imagen. En el primer ejemplo colocaremos un texto a una imagen:

//Cargando la imagen butterfly.jpg
$img = imagecreatefromjpeg('butterfly.jpg');
               
//Cargando la marca de agua en formato PNG
$marca = imagecreatefrompng('marca.png');
               
//Escribir uan cadena de texto en el lienzo en las coordenadas 450, 400
$color = imagecolorallocate($img, 0, 0, 0);
imagestring($img, 5, 450, 400, 'vista: devlaz.com', $color);
               
//Guardamos y leberamos el objeto
//Utilizamos la funcion imagejpeg, para el formato JPG, con una calidad del 90%
imagejpeg($img, 'ejemplo3.jpg', 90);
imagedestroy($img);

Para colocar una imagen como marca de agua,  solo sobreponemos la imagen una con otra, tomando como lienzo base la imagen original:

//Cargando imagen butterfly.jpg de 640x426px
$img = imagecreatefromjpeg('butterfly.jpg');
             
//Cargando la marca de agua en formato PNG
$marca = imagecreatefrompng('marca.png');

//Obteniendo el alto y ancho de la imagen butterfly.jpg
$iw = imagesx($img);
$ih = imagesy($img);

//Obteniendo el alto y ancho de la imagen marca.png
$w = imagesx($marca);
$h = imagesy($marca);

//Margen de la marca de agua
$margen = 10;

//Calculando coordenadas para colocar marca de agua en la esquina inferior izquierda
$x = $iw - $w - $margen;
$y = $ih - $h - $margen;

//Colocando la marca de agua, en la esquina inferior izquierda, en las coordenadas 420, 360
imagecopy($img, $marca, $x, $y, 0, 0, $w, $h);

//Guardamos y leberamos el objeto
imagejpeg($img, 'ejemplo4.jpg', 100);
imagedestroy($img);

Resultado:

Colocar marca de agua a imagenes con GD en PHP

 

 

Ejemplo

Descargar
Etiquetas
PHP gd
Compartir