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.