Marca de agua en imágenes con PHP

En algunos proyectos nos pueden solicitar que protejamos las imágenes que se muestran en la web para intentar imposibilitar de alguna manera que el usuario que se conecta pueda conseguir las imágenes.

La verdad es que poco se puede hacer sobre este tema. Todo y que existen maneras para poder deshabilitar el botón derecho del ratón en nuestra página, incluso ocultar el código para evitar que se encuentre la ruta a la imagen y, así, que se pueda descargar, es bastante difícil ya que todo lo que se muestra en la pantalla del usuario es propiedad de éste y con un simple pantallazo ya está obteniendo una copia de la imagen.

Lo que sí se puede hacer es poner en nuestras imágenes una marca de agua. Una marca de agua no es más que una pequeña mancha (raya, texto, imágen, etc.) en la imagen, simalar al logotipo que sale en televisión durante la emisión de un programa (la típica mosca), que su función es decir que esa foto/imágen te pertenece o tiene copyright.

Para superponer una imágen encima de otra automáticamente, a modo de marca de agua, cuando ésta se muestra por pantalla, lo primero que debemos hacer es crear una imagen .PNG. Cualquier formato serviría pero es mejor que la imagen que se utilizará como marca de agua sea en formato .PNG ya que trabaja mejor con las transparencias.

Después de crear la imágen, el siguiente paso sería crear una página PHP con el siguiente código:

<?php
$image = $_GET['i'];
$watermark = "watermark.png";
$im = imagecreatefrompng($watermark);
$ext = substr($image, -3);
if(strtolower($ext) == "gif") {
 if (!$im2 = imagecreatefromgif($image)) {
 echo "Error opening $image!"; exit;
 }
 } else if(strtolower($ext) == "jpg") {
 if (!$im2 = imagecreatefromjpeg($image)) {
 echo "Error opening $image!"; exit;
 }
 } else if(strtolower($ext) == "png") {
 if (!$im2 = imagecreatefrompng($image)) {
 echo "Error opening $image!"; exit;
 }
 } else {
 die;
 }
imagecopy($im2, $im, (imagesx($im2)/2)-(imagesx($im)/2), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));
if($_GET[repeat]) {
 $waterless = imagesx($im2) - imagesx($im);
 $rest = ceil($waterless/imagesx($im)/2);
for($n=1; $n<=$rest; $n++) {
 imagecopy($im2, $im, ((imagesx($im2)/2)-(imagesx($im)/2))-(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));
 imagecopy($im2, $im, ((imagesx($im2)/2)-(imagesx($im)/2))+(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));
 }
 }
header("Content-Type: image/jpeg");
 imagejpeg($im2);
 imagedestroy($im);
 imagedestroy($im2);
 ?>

A esta página se la llamará pasándole, en el parámetro “i”, la ruta de la imagen que queremos tratar. Si llamámos a esta página pasándole el parámetro “repeat”, la marca se repetirá a lo largo de la anchura de la imágen a tratar.

La forma de llamar a la página que hemos creado se haría insertando el código de la llamada en el atributo src del TAG <img>.

Ejemplo: <img src="watermark.php?i=miimagen.jpg" alt="Nuestra imágen">

No existen entradas relacionadas.

Etiquetado con: ,
Publicado en: Programación

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*