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.
¿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.
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>
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>
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.
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';
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]
Gracias por tu aporte, valoro mucho el trabajo que haces
Muchas gracias Freddy
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!