Lenguaje PHP

Marca de Agua PHP Imagen y texto: Ejemplo Completo

Marca de Agua PHP. La marca de agua puede ser imagen o texto que se utiliza en las imágenes para mostrar la pertenencia y para proteger las imágenes en caso de vender las imágenes, siempre tenemos que mostrar una imagen previa por ejemplo: Fotolia, iStockPhoto, Shutterstock, entre otras.

Si tienes en mente la creación de una galería de imágenes y/o página de comercio electrónico usando PHP y no quiere que los demás tomen tus fotos.

Aquí, te presento una solución muy fácil de implementar y es de usar una marca de agua con el nombre de tu empresa o quizá el logo de tu empresa.

Marca de agua PHP
Marca de agua PHP

¿Cómo funciona el sistema mencionado?

Si bien, en nuestra galería o cualquier otra página ya sea un Blog, comercio electrónico, pagina web, tenemos imágenes de nuestra autoría y debemos de protegerlas con este simple proceso.

El método es agregar una marca de agua mientras la página carga y veremos que nuestras imágenes tendrán por defecto marcas de agua de nuestra empresa, así de simple.

Marca de Agua PHP Imagen y texto

A continuación, estaremos detallando los pasos para lograr nuestro objetivo.

Estructura de archivos

Vamos a tener la siguiente estructura de archivos para este tutorial.

Estructura de archivos
Estructura de archivos

Pasos para la creación de la Marca de Agua

Aquí, mostraremos 3 pasos para implementar el sistema de marca de agua usando PHP

Primer paso: Crear formulario de carga de archivos

En el fichero index.php, crearemos un formulario para la subida de archivos tipo imagen y una etiqueta «SELECT» más conocido como lista desplegable que nos permitirá elegir marca de agua tipo texto o tipo imagen según nuestra necesidad. Veamos el ejemplo.

<div class="col-lg-6">
<form action="" method="post" enctype="multipart/form-data">  
<div class="form-group">
<input type="file" name="image" value="" class="btn btn-default">
</div>
<div class="form-group">
<select required name="image_upload" class="form-control">
<option value="">Seleccione: Marca de agua</option>
<option value="texto_watermark">Marca de agua: Texto</option>
<option value="imagen_watermark">Marca de agua: Imagen</option>
</select>
</div>
<input type="submit" value="Cargar Imagen" class="btn btn-primary">
</form>
</div>
Formulario marca de agua usando PHP
Formulario marca de agua usando PHP

Segundo paso: Procesar la carga de imagen y agregar marca de agua

Este proceso se realizará en el fichero «index.php» conjuntamente con el fichero «funciones.php«, procesaremos directamente la carga de la imagen y agregaremos la marca de agua a las imágenes cargadas. Trabajaremos con dos funciones básicas.

  • La función «addTextWatermark()» añadir texto marca de agua
  • Además, a la función addImageWatermark() para añadir la marca de agua de la imagen

Usaremos una imagen para la marca de agua llamado «marca_agua.png» y el texto «BaulPHP» para la marca de agua de texto, estas dos funciones están declaradas en el fichero funciones.php.

<div class="panel panel-default">
<div class="panel-body">
<?php
if(isset($_FILES['image']['name'])){
// Validando el tipo de imagen cargada
switch($_FILES['image']['type']){
case 'image/jpeg':          
case 'image/jpg':
// Añade más validación si quieres
if(getimagesize($_FILES['image']['tmp_name']) < (1024*1024*1024*1024)){
  echo 'El tamaño de la imagen es superior a 2MB';
} elseif(empty($_POST['image_upload'])){
  echo 'Por favor seleccione el tipo de marca de agua';
} else {
  // Crear un nuevo nombre para la imagen cargada con la ruta del directorio de carga
  list($txt, $ext) = explode(".", $_FILES['image']['name']);
  $file_name = "images/watermark.".$ext;
  $upload = copy($_FILES['image']['tmp_name'], $file_name);
  if($upload == true){
      // Verificar que tipo de marca de agua esta seleccionado
      if($_POST['image_upload'] == 'texto_watermark'){
          // Añadir marca de agua de texto sobre la imagen
          $watermark = "BAULPHP"; // Añade tu propia marca de agua aquí
          addTextWatermark($file_name, $watermark, $file_name);                         
      } elseif($_POST['image_upload'] == 'imagen_watermark'){
          // Añadir marca de agua de imagen sobre imagen
          $WaterMark = 'marca_agua.png';
          addImageWatermark ($file_name, $WaterMark, $file_name, 50);
      }
      echo '<img src="'.$file_name.'" class="preview" width="700"><br>';
  } else {
      echo 'Error al subir imagen';
  }
}
break;
default:
echo 'Por favor, seleccione el archivo de tipo jpeg o jpg para subir';
}
}
?>
</div>
</div>
Resultado final marca de agua PHP
Resultado final marca de agua PHP

Tercer paso: Declarar las funciones agregar marca de agua

Estas dos funciones están declaradas ene le fichero «funciones.php«, crearemos las funciones que tendrán como nombre «addTextWatermark()» para textos y para las imágenes «addImageWatermark «. Además, para la fuente de texto usaremos la fuente de nombre «Roboto-Black.ttf» para añadir marca de agua de texto.

Caso contrario pueden descargar la fuente de su preferencia en internet, recordemos que existen miles de fuentes que ustedes pueden descargar y declararlos en este código PHP.

<?php
// Función para agregar texto marca de agua sobre la imagen
function addTextWatermark($src, $watermark, $save=NULL) { 
 list($width, $height) = getimagesize($src);
 $image_color = imagecreatetruecolor($width, $height);
 $image = imagecreatefromjpeg($src);
 imagecopyresampled($image_color, $image, 0, 0, 0, 0, $width, $height, $width, $height); 
 $txtcolor = imagecolorallocate($image_color, 255, 255, 255);
 $font = dirname(__FILE__).'/Roboto-Black.ttf';
 $font_size = 50;
 imagettftext($image_color, $font_size, 0, 50, 150, $txtcolor, $font, $watermark);
 if ($save<>'') {
    imagejpeg ($image_color, $save, 100); 
 } else {
     header('Content-Type: image/jpeg');
     imagejpeg($image_color, null, 100);
 }
 imagedestroy($image); 
 imagedestroy($image_color); 
}

// Función para agregar marca de agua de imagen sobre imágenes
function addImageWatermark($SourceFile, $WaterMark, $DestinationFile=NULL, $opacity) {
 $main_img = $SourceFile; 
 $watermark_img = $WaterMark; 
 $padding = 5; 
 $opacity = $opacity;
 // crear marca de agua
 $watermark = imagecreatefrompng($watermark_img); 
 $image = imagecreatefromjpeg($main_img); 
 if(!$image || !$watermark) die("Error: La imagen principal o la imagen de marca de agua no se pudo cargar!");
 $watermark_size = getimagesize($watermark_img);
 $watermark_width = $watermark_size[0]; 
 $watermark_height = $watermark_size[1]; 
 $image_size = getimagesize($main_img); 
 $dest_x = $image_size[0] - $watermark_width - $padding; 
 $dest_y = $image_size[1] - $watermark_height - $padding;
 imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $opacity);
 if ($DestinationFile<>'') {
    imagejpeg($image, $DestinationFile, 100); 
 } else {
     header('Content-Type: image/jpeg');
     imagejpeg($image);
 }
 imagedestroy($image); 
 imagedestroy($watermark); 
}

?>

Descripción del código anterior.

Las funciones anteriormente declaradas suele presentar errores al momento de crear la imagen. Sin embargo, el error radica en la ruta de nuestra fuente que hemos elegido para la marca de agua.

No se puede mostrar la imagen porque contiene errores
No se puede mostrar la imagen porque contiene errores

La solución es estos inconvenientes es lo siguiente.

// Declaramos la fuente de la marca de agua
$font = /Roboto-Black.ttf';

La solución es agregar la función llamada «dirname«, justo antes de la ruta absoluta de la fuente. Por lo tanto, la función «dirname«: Devuelve la ruta de un directorio padre y con ello ya no tendremos errores de código.

$font = dirname(__FILE__).'/Roboto-Black.ttf';
Marca de Agua PHP Imagen y texto Ejemplo Completo
Marca de Agua PHP Imagen y texto Ejemplo Completo

CONCLUSIÓN DE MARCA DE AGUA PHP

Como hemos podido apreciar la implementación de una marca de agua para nuestras imágenes es muy sencilla. Sin embargo, solo tendremos que declarar las funciones correctamente y al cargar la página se agregaran automáticamente las marcas de agua.

Su uso puede ser automático al cargar la página o sino haciendo uso de un formulario como el presente formulario.

Además, podemos personalizar la fuente o logo de nuestra empresa o página web.

Espero que esta breve explicación les ayude en abundancia y además les dejare un archivo comprimido con el ejemplo completo.

Descarga del ejercicio

Puedes descargar el ejemplo completo mediante el siguiente vínculo.

[sociallocker id=5099] [/sociallocker]

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

3 comentarios

  1. Muy bueno el tutorial, se nota que ama lo que hace y quiere enseñar, se lo agradezco mucho, me ha dado una idea para agregar marcas de agua a las imágenes de mi web, pero tengo una base de datos, en mi caso usaré una función que renombre a los archivos creados para que no se anulen ya que al parecer van a la carpeta sobreescribiéndose. Muchas gracias de nuevo, saludos!

Deja una respuesta

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

Botón volver arriba