Cómo subir una imagen y añadirle una marca de agua mediante PHP

Las marcas de agua son la mejor opción a la hora de proteger nuestras imágenes de ser robadas o reutilizadas por terceras personas. Puedes mostrar que la imagen es de tu propiedad añadiéndoles una marca de agua. Las marcas de agua ayudan a identificar al creador de la imagen/foto. Usualmente habrás visto esta práctica en imágenes con copyright. En este tipo de imágenes generalmente aparece el logo o el nombre del creador como un sello encima de la imagen.

Subir imágenes al servidor se puede implementar de forma sencilla con PHP. Pero lo que sería rizar el rizo es a la vez que subes la imagen al servidor, añadirle una marca de agua. La librería GD de PHP nos proporciona una forma sencilla de añadir marcas de agua a una imagen utilizando canales alfa. Las marcas de agua dinámicas son muy útiles para aquellos desarrollos que cuentan con una interfaz de usuario donde puedan subir imágenes. En este tutorial te mostraremos cómo subir una imagen y añadirle una marca de agua mediante PHP.

Formulario de subida de fichero

Debes crear un formulario HTML que le permita al usuario seleccionar una imagen.

  • Asegúrate que el tag form contenga los siguientes atributos: method=”post” y enctype=”multipart/form-data”
  • También, asegúrate que el tag input contiene el atributo type=”file”
<form action="upload.php" method="post" enctype="multipart/form-data">
    Selecciona imagen a subir:
    <input type="file" name="file">
    <input type="submit" name="submit" value="Subir">
</form>

Una vez el usuario pulse en el botón Enviar, la información de los campos se enviarán al fichero upload.php el cual se encargará de almacenar la imagen en el servidor y de agregarle la marca de agua.

Subir imagen y añadir marca de agua con PHP (upload.php)

El fichero upload.php gestionará la subida de las imágenes y del agregado de la marca de agua.

  • Utiliza la función PHP pathinfo() para obtener la extensión del archivo y verifica si es un tipo de archivo permitido
  • Sube el archivo al servidor utilizando la función move_uploaded_file() en PHP.
  • Sube y crea una nueva marca de agua utilizando la función imagecreatefrompng()
  • Define el margen derecho e inferior de la imagen de marca de agua.
  • Obtén la altura y el ancho de la imagen de marca de agua.
  • Copia la imagen de marca de agua en la foto subida utilizando la función imagecopy().
  • Guarda la imagen con marca de agua usando la función imagepng().
  • Libera memoria asociada con el recurso de imagen usando la función imagedestroy().
  • Muestra el estado de subida de la imagen con marca de agua.
<?php 
// Configuración del path 
$targetDir = "uploads/"; 
$watermarkImagePath = 'marca-de-agua.png'; 
 
$statusMsg = ''; 
if(isset($_POST["submit"])){ 
    if(!empty($_FILES["file"]["name"])){ 
$fileName = basename($_FILES["file"]["name"]); $targetFilePath = $targetDir . $fileName; $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION); $allowTypes = array('jpg','png','jpeg'); if(in_array($fileType, $allowTypes)){ if(move_uploaded_file($_FILES["file"]["tmp_name"], $targetFilePath)){ $watermarkImg = imagecreatefrompng($watermarkImagePath); switch($fileType){ case 'jpg': $im = imagecreatefromjpeg($targetFilePath); break; case 'jpeg': $im = imagecreatefromjpeg($targetFilePath); break; case 'png': $im = imagecreatefrompng($targetFilePath); break; default: $im = imagecreatefromjpeg($targetFilePath); } $marge_right = 10; $marge_bottom = 10; $sx = imagesx($watermarkImg); $sy = imagesy($watermarkImg); imagecopy($im, $watermarkImg, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($watermarkImg), imagesy($watermarkImg)); imagepng($im, $targetFilePath); imagedestroy($im); if(file_exists($targetFilePath)){ $statusMsg = "La imagen con marca de agua se ha subido satisfactoriamente"; }else{ $statusMsg = "Imagen subida fallida. Prueba otra vez."; } }else{ $statusMsg = "Lo siento. Ha ocurrido un error subiendo el archivo."; } }else{ $statusMsg = 'Lo siento. Solo se permiten archivo JPG, JPEG y PNG'; } }else{ $statusMsg = 'Debes seleccionar una imagen'; } } echo $statusMsg;

COMPARTE ESTE ARTÍCULO

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