Image resize y Watermark con PHP y GD

Muchas veces trabajamos con imágenes dinámicas en nuestros portales y paginas por lo que según la necesidad utilizamos herramientas para manejar imágenes. Muchos de estos casos es cambiar el tamaño de la imagen o foto de manera automática sin necesidad de editarla con algún tipo de programa.

La librería GD2 nos permite hacer maravillas desde PHP con las imágenes. En ocasiones necesitamos ademas poner marcas a las imágenes o fotos para evitar el plagio o el uso de ancho de banda de nuestras paginas linkeadas hacia otros sitio donde publican nuestras fotos sin los debidos derechos o incluso la simple cortesía o agradecimientos.

Pues bien, la idea es tomar una imagen que ya existe en el servidor o en nuestra aplicación cambiarle el tamaño y ademas colocarle una marca de agua o watermark sobre la misma. He aqui como lo he logrado, tomando en cuanta que estas dos cosas solo aparecen por separado y en mínimos casos unidos pero bastante largo el script o código que muchas veces uno desiste al ver semejante cantidad de lineas que uno necesita analizar cuidadosamente para encontrar como usarla.

así puede hacerse ambas operaciones con la imagen o foto con un solo y sencillo script:

1. Crearemos un archivo llamado thumb.php

2. Colocaremos este código:

$src = $_GET['src'];
$maxsize = $_GET['maxsize'];

if ($maxsize == '') {
$maxsize = 75;
}

// el archivo o imagen
$filename = $src;

// Asignar el ancho y alto maximos
$width = $maxsize;
$height = $maxsize;

// mandando las cabeceras correspondientes
header('Content-type: image/jpeg');

// obteniendo las dimensiones actuales
list($width_orig, $height_orig) = getimagesize($filename);

if ($width && ($width_orig < $height_orig)) {
$width = ($height / $height_orig) * $width_orig;
} else {
$height = ($width / $width_orig) * $height_orig;
}

// Cambiando el tamano de la imagen o resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

// Marca de Agua o Watermark
$watermark = imagecreatefrompng('watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
$dest_x = $width - $watermark_width - 5;
$dest_y = $height - $watermark_height - 5;
imagecopymerge($image_p, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);

// Salida
imagejpeg($image_p);
imagedestroy($image);
imagedestroy($image_p);
imagedestroy($watermark);

3. Uso del script

El uso de este pequeño script es sencillo. Solo necesitamos llamar el archivo thumb.php con sus respectivas variables justamente donde queremos que aparezca la imagen retocada en el html. Así:

< src="http://www.dominio.ltd/thumb.php?src=path/to/image.jpg">

o bien con los atributos adicionales

< src="http://www.dominio.ltd/thumb.php?src=path/to/image.jpg&maxsize=100">

…Ya está!

Eso es todo lo que necesitamos para transformar nuestras imágenes o fotos de manera dinámica sin gastar mas de 3 minutos.

Donde src es la ruta hacia la imagen o archivo foto a retocar y maxsize es el tamaño maximo que se presentará en la imagen ya sea horizontal o vertical. Esto es que si la imagen tiene un ancho de 300 pixceles y una altura de 400 pixceles. considerando que la altura es mayor que la longitud, entonces la imagen sera presentada en proporción a la altura ya que esta es el tamaño máximo considerando el ancho que es menor.

Y donde watermark.png es la marca de agua que queremos colocar sobre nuestra foto fuente o $src en el script thumb.php. así que buscaremos la linea correspondiente y colocamos la marka de agua que queramos en la ruta correspondiente.