GIMP: un código para editar una carpeta completa de imágenes

[GIMP 2.8.16]


EDITADO: ver más abajo.

Hola,

Soy nuevo en Python y necesito pedirle a la comunidad que me ayude a encontrar dónde falla este código. estoy teniendo problemas Esta es la versión 1.0, siguiendo esta respuesta :

import glob
source_folder = "/home/pecesaquadros/Desktop/T/"
dest_folder = "/home/pecesaquadros/Desktop/T2/"

def auto(source_folder, dest_folder):
    for filename in glob(source_folder  + "/*.JPG"):
        img = pdb.gimp_file_load(source_folder + filename, source_folder + filename)
        pdb.gimp_image_rotate(img,0)
        pdb.gimp_image_convert_grayscale(img)
        drawable = pdb.gimp_image_get_active_drawable(img)
        pdb.gimp_brightness_contrast(drawable, 28,100)
        disp = pdb.gimp_display_new(img)
        yield img
        pdb.gimp_image_merge_visible_layers(img, CLIP_TO_IMAGE)
        pdb.gimp_file_save(img, img.layers[0], dest_folder + filename, dest_folder + filename)
        pdb.gimp_display_delete(disp)
        pdb.gimp_image_delete(img)  # drops the image from gimp memory

seq = auto(source_folder, dest_folder)
next(seq)

con salida, en GIMP 2.8.16 Python Console :

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 2, in auto
TypeError: 'module' object is not callable

Muchas gracias. Estoy seguro de que esta pregunta ayudará a muchos. Podría hacer un complemento con parámetros interesantes, disponible para todos; se llamará "Fotocopia" :)

...a continuación, estoy creando un bucle para crear un código TeX que compilará todas las imágenes en un pdf...

Gracias de nuevo,

Alabama


EDITAR

Nuevo código:

import glob
source_folder = "/home/pecesaquadros/Desktop/T/"
dest_folder = "/home/pecesaquadros/Desktop/T2/"

def auto(source_folder, dest_folder):
    for filename in glob.glob(source_folder  + "/*.JPG"): #blabla.JPG
        img = pdb.gimp_file_load(filename,filename)
        pdb.gimp_image_rotate(img,0)              #Editing starts
        pdb.gimp_image_convert_grayscale(img)
        pdb.gimp_image_select_rectangle(img, 2, 0, 0, 1839, 600)
        drawable = pdb.gimp_image_get_active_drawable(img)
        pdb.gimp_brightness_contrast(drawable, 60,127)
        pdb.gimp_image_select_rectangle(img, 2, 0, 600, 1839, 900)
        drawable = pdb.gimp_image_get_active_drawable(img)
        pdb.gimp_brightness_contrast(drawable, 32,127)
        pdb.gimp_image_select_rectangle(img, 2, 0, 1500, 1839, 900)
        drawable = pdb.gimp_image_get_active_drawable(img)
        pdb.gimp_brightness_contrast(drawable, 14,127)
        pdb.gimp_image_select_rectangle(img, 2, 0, 2400, 1839, 900)
        drawable = pdb.gimp_image_get_active_drawable(img)
        pdb.gimp_brightness_contrast(drawable, 0,127)
        disp = pdb.gimp_display_new(img)      #Editing ends
        yield img               #Image is displayed for me to manipulate
        pdb.gimp_image_merge_visible_layers(img, CLIP_TO_IMAGE)
        pdb.gimp_file_save(img, img.layers[0],filename,dest_folder + filename)
        pdb.gimp_display_delete(disp)
        pdb.gimp_image_delete(img)

seq = auto(source_folder, dest_folder)
next(seq) #This, and enter, to go to the next file

Resultados en:

  1. Los archivos se sobrescriben, no se guardan en la nueva carpeta
  2. A veces, y solo a veces, aparece uno de estos dos errores:

A

Mensaje de GIMP

B

Mensaje de GIMP

0_0

PD: el rendimiento está en mis planes.

debe tener en cuenta que el código que copió de Sports the yieldStatement porque esa pregunta requería una intervención manual en cada imagen. Si todo lo que desea hacer en la imagen está automatizado, puede abandonar la yieldlínea, así como las llamadas a pdb.gimp_display_newy pdb.gimp_display_delete, y GIMP procesará todas sus imágenes lo más rápido posible.
Quiero que suceda el rendimiento. Gracias jsbueno, y gracias por tu correo.
No puedo moverme, como está codificado en su respuesta, pdb.gimp_file_save(img, img.layers[0],dest_folder + filename,dest_folder + filename). El resultado es RuntimeError: no se pudo abrir '/home/pecesaquadros/Desktop/T2//home/pecesaquadros/Desktop/T‌​2/P1050289.JPG' para leer: No existe tal archivo o directorio . He jugueteado con eso. Por ejemplo, pdb.gimp_file_save(img, img.layers[0],filename,dest_folder + filename)ambos pdb.gimp_file_save(img, img.layers[0],filename,filename)permiten que el programa se ejecute pero los archivos se sobrescriben y no se guardan en dest_folder.

Respuestas (1)

globes un módulo que contiene una globfunción, por lo que no debería ser glob(source_folder + "/*.JPG")peroglob.glob(source_folder + "/*.JPG")

Además, si proporciona una ruta como parte del patrón a glob.glob(), la salida contendrá la ruta completa a los archivos. Dado que está volviendo a agregarle el nombre del directorio, aparece dos veces en el nombre que le da a gimp_file_load(). Así que prueba algo como:

for filename in glob.glob(source_folder  + "/*.JPG"):
    img = pdb.gimp_file_load(filename,filename)
Gracias. He aprendido más de lo que esperaba de una respuesta tan concisa. Sin embargo, la nueva salida es: Rastreo (última llamada más reciente): Archivo "<entrada>", línea 1, en <módulo> Archivo "<entrada>", línea 3, en auto RuntimeError: No se pudo abrir '/home/pecesaquadros /Desktop/T//home/pecesaquadros/Desktop/T/P1050289.JPG' para lectura: No existe tal archivo o directorio
Ver respuesta editada.
Gracias, xenoide. El mismo problema ocurrió con pdb.gimp_file_save(img, img.layers[0], dest_folder + filename, dest_folder + filename). Después de arreglar ambos, vea qué sucede ... (ver pregunta editada).
Tu código me funciona. Agregue declaraciones de impresión en su código (especialmente para mostrar el valor de img e img). Luego puede ver qué declaración está produciendo el mensaje de error y cuál es el valor de img.ID cuando esto sucede.
Voy a investigar más a fondo. Para terminar con esto y llamarlo a su fin (oa una respuesta ), los archivos se sobrescriben, no se guardan en la carpeta de destino.
Hora de RTFM. El documento de gimp-display-deletedice: Este procedimiento elimina la visualización especificada. Si esta es la última visualización restante de la imagen subyacente, la imagen también se elimina. Dado que esto se aplica a su caso, la imagen ya se elimina cuando intenta eliminarla con gimp-image-delete.
Hora de RTQ: En mi caso, "a veces, y solo a veces, aparece uno de estos dos errores", sea cual sea la carpeta, sea cual sea la imagen, sea lo que sea que haga. Además, dije: "Voy a investigar más". El tema ahora era sobre la sobrescritura de archivos. Gracias por tu último comentario vulgar inútil e innecesario.
* sobre cómo guardar archivos en dest_folder (y sé que el código real da instrucciones para sobrescribir)