Añadiendo una marca de agua a nuestras imágenes con Python

El post de hoy es corto, pero auna dos cosas que me gustan mucho, el desarrollo y la fotografía.

Me planteaba un amigo hace unos días si existia la posiblidad de poner una marca de agua a las imágenes de una carpeta dada.

Obviamente, durante la edición de las fotos, en casi todos los programas de revelado y edición, se puede añadir esta característica, pero entiendo que hacerlo una a una, puede ser un poco farragoso.

Existen también algunas utilidades, si mal no recuerdo en Photoshop, que permite mediante macros hacer algo así también, pero la gracia como siempre, es investigar un poco y montar algo muy personal.

Al lio

Buscando un poco de información sobre el asunto, he montado un pequeño script en Python que nos permite recorrer una carpeta dada, aplicar la marca de agua y guardarla en otra carpeta, preparada para almacenar las copias.

El codigo es relativamente sencillo y os lo dejo aquí documentado

## Añadimos las librerias del sistema e instalamos con 
## pip install pillow, la libreria para tratar gráficos, sino la tenemos ya

import os
from PIL import Image, ImageDraw, ImageFont

# Creamos la función que procesa las imágenes
def agregar_marca_de_agua(imagen_path, marca_de_agua_texto, salida_path, transparencia=0, tamano_fuente=50):

    # Abrir la imagen
    imagen = Image.open(imagen_path).convert("RGBA")

    # Crear un objeto ImageDraw
    draw = ImageDraw.Draw(imagen)

    # Cargar una fuente
    #
 Podemos usar cualquier fuente, solo hay que llamar a la ruta adecuada
    fuente = ImageFont.truetype("arial.ttf", tamano_fuente)

    # Configurar el color y la transparencia de la marca de agua

    # En este caso, color negro y 0% de transparencia
    color_marca_de_agua = (0, 0, 0, transparencia)

    # Calcular la posición para la esquina inferior izquierda
    ancho, alto = imagen.size
    margen = 10
    posicion = (margen, alto - tamano_fuente - margen)

    # Agregar la marca de agua a la imagen
    draw.text(posicion, marca_de_agua_texto, font=fuente, fill=color_marca_de_agua)

    # Guardar la imagen resultante
    imagen.save(salida_path, "PNG")

def procesar_carpeta(input_folder, output_folder, marca_de_agua_texto):
    # Verificar y crear la carpeta de salida si no existe
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # Listar archivos en la carpeta de entrada
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.png', '.jpeg')):  # Filtrar solo imágenes
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, filename)

            # Aplicar la marca de agua a cada imagen
            agregar_marca_de_agua(input_path, marca_de_agua_texto, output_path)

if __name__ == "__main__":
    # Rutas de la carpeta de entrada y salida
    carpeta_fotos = r"ruta/carpeta/fotos"
    carpeta_salida = r"ruta/carpeta/fotos/marcadas"

    # Marca de agua
    marca_de_agua_texto = "TEXTO_DE_LA_MARCA_DE_AGUA"

    # Procesar la carpeta
    procesar_carpeta(carpeta_fotos, carpeta_salida, marca_de_agua_texto)

Para ejecutar el script, simplemente hemos de llamarlo en la carpeta donde lo tengamos guardado con

python marca_agua.py

Y acto seguido, ejecutará el proceso e irá recorriendo la carpeta indicada en carpeta_fotos y creará la imagen modificada en carpeta_salida

Un ejemplo

Definimos en el script que la carpeta de origen es Ballet/editadas y la carpeta de salida será Ballet/editadas/marcadas.

Esta es la carpeta de origen:

Una vez procesado el script, se ve así:

Si entramos en la carpeta marcadas veremos que tenemos la copia de las dos fotografías originales:

Y si abrimos las fotos, podremos ver que abajo a la izquierda tenemos la marca de agua que le hemos indicado en el script:

Como podeis ver, el resultado es aceptable y aunque se puede, como siempre hacer mejoras al script, es totalmente funcional.

Como siempre, os dejo el código disponible en mi cuenta de Github, para que podáis hacer vuestras pruebas.

Por Jose Manuel Sanz Prieto

Desarrollador web. En este blog hablo de fotografía, programación con Django, Python, PHP y privacidad.

Dejar un comentario

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