Marcas de agua con PHP

1 COMENTARIO -  Publicado hace 14 meses -  Clasificado en: , ,

En una entrada anterior se mostraba como añadir una marca de agua con CSS. Una forma más efectiva de realizar las marcas de agua es aprovecharnos de las posibilidades que nos ofrece PHP y GD.

Lo primero que deberemos hacer es, con un editor de imágenes, realizar un fichero que funcionará a modo de marca de agua. Desde la versión 2.0 de GD, éste ha eliminado la compatibilidad con ficheros GIF, por lo que lo mejor es realizar un fichero en formato .PNG. El utilizado para el ejemplo que aquí se mostrará se denomina "marca_de_agua.png" y es éste:

Almacenamos la imagen dentro de una variable:

$ruta_marca = 'marca_de_agua.png';
$watermark = imagecreatefrompng($ruta_marca);

Ahora procederemos a crear el fichero JPEG final -con marca de agua- a partir de una imagen inicial que almacenaremos en la variable $imagen.

$ruta_imagen = 'Tulipanes.jpg';
$imagen = imagecreatefromjpeg($ruta_imagen);

La variables $ruta_imagen y $ruta_marca deberán incluir las ruta necesarias para acceder a ambos ficheros.

Lo siguiente que hacemos es, obtener las dimensiones de la imagen, sustraer las dimensiones de la marca de agua y, dejando un margen de 10 px, obtener las posiciones x e y sobre las que se colocará la marca de agua.

$tamanyo_imagen = getimagesize($ruta_imagen);
$tamanyo_marca = getimagesize($ruta_marca);
$dest_x = $tamanyo_imagen[0] - $tamanyo_marca[0] - 10;
$dest_y = $tamanyo_imagen[1] - $tamanyo_marca[1] - 10;

Ahora tan sólo queda unir la imagen y la marca de agua. Para ello nos valemos de la función imagecopymerge. La sintaxis es:

imagecopymerge  ( resource $dst_im  , resource $src_im  , int $dst_x  , int $dst_y  , int $src_x  , int $src_y  , int $src_w  , int $src_h  , int $pct  )

Lo que hace es copiar $src_im en $dst_im, comenzando en las coordenadas x e y especificadas en src_x, src_y, con un ancho y alto especificados en $src_w y $src_h y unidas de acuerdo con el pct especificado. Más información acerca de imagecopymerge.

En nuestro caso quedaría del siguiente modo:

imagecopymerge($imagen, $watermark, $dest_x, $dest_y, 0, 0,$tamanyo_marca[0], $tamanyo_marca[1], 100);

Para, finalmente mostrar la imagen resultante necesitaremos estas tres líneas de código:

imagejpeg($imagen);  //Mostrar la imagen
imagedestroy($imagen); //Libera la memoria asociada a la imagen imagedestroy($watermark); //Libera la memoria asociada a la imagen

El código final sería, añadiendo el content-type apropiado sería:

<?php 
header('content-type: image/jpeg');

$ruta_marca = 'marca_de_agua.png';
$watermark = imagecreatefrompng($ruta_marca);

$ruta_imagen = 'Tulipanes.jpg';
$imagen = imagecreatefromjpeg($ruta_imagen);

$tamanyo_imagen = getimagesize($ruta_imagen);
$tamanyo_marca = getimagesize($ruta_marca);

$dest_x = $tamanyo_imagen[0] - $tamanyo_marca[0] - 10;
$dest_y = $tamanyo_imagen[1] - $tamanyo_marca[1] - 10;
imagecopymerge($imagen, $watermark, $dest_x, $dest_y, 0, 0,$tamanyo_marca[0], $tamanyo_marca[1], 100);

imagejpeg($imagen);
imagedestroy($imagen);
imagedestroy($watermark);
?>

Ver ejemplo en funcionamiento » »

Descargar ejemplo » »

Algunas entradas relacionadas:

También te puede interesar:

COMENTARIOS

Publicado hace 4 meses
mauro -   http://www.minicio.com.ar

gracias capo, lla verdad que muy bien explicado , muy bueno el ejemplo y te felicito por la web esta muy bonita .
saludos.
Haz un comentario

¡Gracias por dejar tu opinión! Por favor procura que tu comentarios sean apropiados respecto al tema tratado en la entrada; que no sean spam, u ofensivos, de otro modo, serán eliminados. Todos los comentarios serán moderados antes de su publicación por lo que su aparición en la web puede verse aplazada un cierto tiempo. Si deseas realizar algún comentario, crítica o sugerencia sobre la propia web puedes hacer a través de la siguiente dirección de correo: webintenta@webintenta.com