4.3. Nivel Avanzado

4.3.1. Marca de agua (watermark.py)

4.3.1.1. Descripción

Este script nos va a colocar una marca de agua a todas las fotos que tenemos en un directorio. Imagínate que eres un profesional de la fotografía y quieres subir imágenes a internet pero quieres poner una marca de agua en el centro de la imagen con tu logotipo. Pues aquí tienes la solución para no ir una a una de las fotos cargando la marca de agua.

Atención

Al igual que el script Sección 4.2.2> Crear Mosaico sólo funciona en versiones superiores a la 2.2.

4.3.1.2. Como usarlo

Simplemente crea un directorio nuevo e introduce las imágenes. Recuerda que sólo tienen que haber imágenes, ningún otro tipo de archivos. Luego ejecuta el script, selecciona el directorio, selecciona la imagen que vamos a usar como marca de agua y la opacidad. Debes tener en cuenta que el script machaca las imágenes, así que haz una copia de las fotos originales.

4.3.1.3. Código

De la línea 54 a la 56 tenemos los parámetros del script que son: la ruta del directorio de la imágenes, la imagen que usaremos como marca de agua y la opacidad de la imagen. En la línea 15 cargamos todos los archivos del directorio y en la línea 17 empezamos a recorrerlos (hemos visto como se hace anteriormente en Sección 4.2.2> Crear Mosaico). En la línea 24 cargamos la imagen, esta función nos cargará la imagen en nuestra ventana eliminando todas las capas (es igual a "Abrir imagen"). En la línea 26 cargamos la fotografía de la marca de agua en una capa y en la 28 la añadimos a la imagen. En la línea 30 movemos la imagen que vamos a usar como marca de agua al centro de la imagen y en la 32 establemente la opacidad pasada como parámetro en nuestro script. Para finalizar en la línea 35 combinamos todas las capas y en la 38 guardamos la imagen con el mismo nombre.

01 >>> #!/usr/bin/env python

02 >>>  Script para Gimp en Python
03 >>> # Realizado por Fco. Javier Pérez Pacheco como ejercicio
04 >>> # para el artículo "Python-fu para no programadores".
05 >>> # Este ejercicio coloca una marca de agua a un directorio
06 >>> # de imagenes

07 >>> # importamos los módulos necesarios
08 >>> from gimpfu import *
09 >>> import os

10 >>> # definimos las funciones necesarias
11 >>> def WaterMark(img, drawable, path, img_mark, opacity):
12 >>>     # comenzamos a agrupar el UNDO
13 >>>     pdb.gimp_image_undo_group_start(img)

14 >>>     # cargamos todos los archivos del directorio 
15 >>>     files = os.listdir(path)

16 >>>     # recorremos 1 a 1 los archivos para ponerle la marca de agua

17 >>>     for file in files:
18 >>>         # cargamos la imagen. Para ello tenemos que pasarle en los dos parámetros
19 >>>         # el nombre de la imagen completa. Para obtener el nombre de la imagen
20 >>>         # completa concatenamos la variable "path" (que contiene el directorio
21 >>>         # donde está la imagen, la variable "os.sep" que contiene la barra separadora
22 >>>         # según el sistema operativo ("/" para Linux y "\" para Windows) y por último
23 >>>         # "arch" que es el nombre del archivo en el que nos encontramos.
24 >>>         img = pdb.gimp_file_load(path+os.sep+file, path+os.sep+file)

25 >>>         # cargamos la foto de la marca de agua en una nueva capa
26 >>>         layer_mark = pdb.gimp_file_load_layer(img, img_mark)
27 >>>         # añadimos la capa a nuestra imagen
28 >>>         pdb.gimp_image_add_layer(img, layer_mark, -1)
29 >>>         # ponemos la marca de agua en el centro de la imagen
30 >>>         pdb.gimp_layer_translate(layer_mark, (img.width/2)-(layer_mark.width/2), (img.height/2)-(layer_mark.height/2))
31 >>>         # le damos la opacidad a la capa establecida en el script
32 >>>         pdb.gimp_layer_set_opacity(layer_mark, opacity)

33 >>>         # combinamos todas las capas visibles. Para que no exista 
34 >>>         # problema a la hora de grabar la imagen
35 >>>         pdb.gimp_image_merge_visible_layers(img, 1)
36 >>>         # guardamos le imagen con el mismo nombre que tenía antes, 
37 >>>         # es decir, la machacamos
38 >>>         pdb.gimp_file_save(img,	img.layers[0], path+os.sep+file, path+os.sep+file)
	
39 >>>     # agrupamos UNDO
40 >>>     pdb.gimp_image_undo_group_end(img)

41 >>> # función principal
42 >>> if __name__ == '__main__':

43 >>>     # llamada a función register
44 >>>     register(
45 >>>         "marca_de_agua",
46 >>>         "Marca de Agua",
47 >>>         "Marca de Agua",
48 >>>         "Javi Pacheco",
49 >>>         "Javi Pacheco",
50 >>>         "2005",
51 >>>         "<Image>/Python-Fu/Ejemplos/3- Avanzado/Marca de Agua (>Gimp2.2)",
52 >>>         "RGB*, GRAY*",
53 >>>         [
54 >>>             (PF_FILE, "path", "Directorio de imagenes", ""),
55 >>>             (PF_FILE, "img_mark", "Imagen de marca de agua", ""),
56 >>>             (PF_SPINNER, "opacity", "Opacidad de la marca", 30, (0, 100, 1)),
57 >>>         ],
58 >>>         [],
59 >>>         WaterMark)
60 >>>     main()