Cómo añadir una marca de agua a una imagen con PHP

La marca de agua es una etiqueta que se utiliza para proteger la propiedad de las imágenes y así evitar que sean robadas. Si, por ejemplo, estás desarrollando una galería de imágenes con PHP y quieres añadir una marca de agua a dichas imágenes cuando se suban, es muy sencillo. Puedes añadir marcas de agua a las imágenes utilizando PHP. En este tutorial aprenderemos a añadir un texto o una imagen como marca de agua a imágenes dinámicamente una vez se suben al servidor.

Habiendo dicho esto, vamos con al meollo. En este tutorial tendremos la siguiente estructura de archivos:

  • index.php
  • functions.php

Crear el formulario de subida

En el fichero index.php, crearemos un formulario HTML con una campo para subir imágenes y un desplegable en el que el usuario podrá decidir qué marca de agua (texto o imagen) integrar en la imagen que suba.

<div class="container">
<h2>Example: How To Add Watermark To Images Using PHP</h2>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image" value="">
<select name="image_upload">
<option value="">Select Water Mark Type</option>
<option value="text_watermark">Text Water Mark</option>
<option value="image_watermark">Image Water Mark</option>
</select>
<input type="submit" value="Upload">
</form>
</div>

Gestionar la subida de la imagen y añadir la marca de agua

Ahora, en el index.php, nos encargaremos de la subida de la imagen y le añadiremos la marca de agua. Pero antes, comprobaremos si el fichero subido es una imagen. Una vez testeado que el archivo es correcto, procederemos a subirlo al servidor y a añadir la marca de agua acorde a lo que el usuario haya decidido en el desplegable (texto o imagen). Llamaremos a la función addTextWatermark() para añadir la marca de agua de texto, y a la función addImageWatermark() para la marca de agua de imagen. Utilizaremos el fichero watermark.png como la imagen de marca de agua y el texto “Programacion” como el texto para la marca de agua.

<?php
if(isset($_FILES['image']['name'])){
// Validating Type of uploaded image
switch($_FILES['image']['type']){
case 'image/jpeg':
case 'image/jpg':
// Add more validation if you like
if(getimagesize($_FILES['image']['tmp_name']) > (1024*1024*1024*1024)){
echo 'Image size is greater than 2MB';
} elseif(empty($_POST['image_upload'])){
echo 'Please select watermark type';
} else {
// Create new name for uploaded image with upload directory path
list($txt, $ext) = explode(".", $_FILES['image']['name']);
$file_name = "images/".rand(0, 9999).'.'.$ext;
$upload = copy($_FILES['image']['tmp_name'], $file_name);
if($upload == true){
// Check type of water mark is selected
if($_POST['image_upload'] == 'text_watermark'){
// Add text watermark over image
$watermark = "PROGRAMACION"; // Add your own water mark here
addTextWatermark($file_name, $watermark, $file_name);
} elseif($_POST['image_upload'] == 'image_watermark'){
// Add image watermark over image
$WaterMark = 'watermark.png';
addImageWatermark ($file_name, $WaterMark, $file_name, 50);
}
echo '<br><img src="'.$file_name.'" class="preview" width="500"><br>';
} else {
echo 'Error uploading image';
}
}
break;
default:
echo 'Please select only JPEG or JPG file type for upload';
}
}
?>

Funciones para crear las marcas de agua

En el fichero functions.php, crearemos las funciones addTextWatermark() y addImageWatermark() para añadir tanto la marca de agua de texto, como la marca de agua en formato imagen, respectivamente. Como puedes ver, usaremos al fuente MONOFONT.ttf para la marca de agua de texto.

<?php
// Function to add text water mark over image
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 = 'MONOFONT.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);
}
// Function to add image watermark over images
function addImageWatermark($SourceFile, $WaterMark, $DestinationFile=NULL, $opacity) {
$main_img = $SourceFile;
$watermark_img = $WaterMark;
$padding = 5;
$opacity = $opacity;
// create watermark
$watermark = imagecreatefrompng($watermark_img);
$image = imagecreatefromjpeg($main_img);
if(!$image || !$watermark) die("Error: main image or watermark image could not be loaded!");
$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);
}
?>

Fuente: phpzag.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP