| Python-fu para no programadores: Creando scripts en Gimp | ||
|---|---|---|
| Anterior | Capítulo 4. Ejemplos de Script con Python-fu | Siguiente |
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. |

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.
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()