GIMP: Ein Code zum Bearbeiten eines ganzen Ordners mit Bildern

[GIMP 2.8.16]


BEARBEITET: Siehe unten.

Hi,

Ich bin neu in Python und muss die Community bitten, mir zu helfen, herauszufinden, wo dieser Code fehlschlägt. Ich habe Probleme. Dies ist Version 1.0, nach dieser Antwort :

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)

mit Ausgabe in 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

Danke vielmals. Ich bin sicher, diese Frage wird vielen helfen. Ich könnte daraus ein Plugin mit interessanten Parametern machen, das für jeden verfügbar ist; es wird "Fotokopie" heißen :)

... als nächstes erstelle ich eine Schleife, um einen TeX-Code zu erstellen, der alle Bilder in ein PDF kompiliert ...

Danke noch einmal,

Al


BEARBEITEN

Neuer Code:

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

Ergebnisse in:

  1. Dateien werden überschrieben und nicht im neuen Ordner gespeichert
  2. Manchmal, und nur manchmal, tritt einer dieser beiden Fehler auf:

EIN

GIMP-Nachricht

B

GIMP-Nachricht

0_0

PS: Ausbeute ist in meinen Plänen.

Sie sollten sich des Codes bewusst sein, den Sie aus der Sportaussage kopiert haben yield, da diese Frage einen manuellen Eingriff in jedes Bild erforderte. Wenn alles, was Sie im Bild tun möchten, automatisiert ist, können Sie die yieldZeile sowie die Aufrufe von pdb.gimp_display_newund fallen lassen pdb.gimp_display_delete- und GIMP verarbeitet alle Ihre Bilder so schnell wie möglich.
Ich möchte, dass Rendite geschieht. Vielen Dank, jsbueno, und vielen Dank für Ihre E-Mail.
Ich kann nicht damit umgehen, wie in Ihrer Antwort codiert, pdb.gimp_file_save(img, img.layers[0],dest_folder + filename,dest_folder + filename). Ausgabe ist Laufzeitfehler: „/home/pecesaquadros/Desktop/T2//home/pecesaquadros/Desktop/T‌​2/P1050289.JPG“ konnte nicht zum Lesen geöffnet werden: Keine solche Datei oder kein solches Verzeichnis . Ich habe damit rumgespielt. Zum Beispiel pdb.gimp_file_save(img, img.layers[0],filename,dest_folder + filename)und pdb.gimp_file_save(img, img.layers[0],filename,filename)beide lassen das Programm laufen, aber Dateien werden überschrieben und nicht in dest_folder gespeichert.

Antworten (1)

globist ein Modul, das eine globFunktion enthält, das sollte glob(source_folder + "/*.JPG")aber nicht seinglob.glob(source_folder + "/*.JPG")

Wenn Sie glob.glob() einen Pfad als Teil des Musters übergeben, enthält die Ausgabe außerdem den vollständigen Pfad zu den Dateien. Da Sie den Verzeichnisnamen erneut hinzufügen, erscheint er zweimal in dem Namen, den Sie gimp_file_load() geben. Versuchen Sie also etwas wie:

for filename in glob.glob(source_folder  + "/*.JPG"):
    img = pdb.gimp_file_load(filename,filename)
Danke schön. Ich habe mehr gelernt, als ich von einer so prägnanten Antwort erwartet hatte. Neue Ausgabe ist jedoch: Traceback (letzter Aufruf zuletzt): Datei "<input>", Zeile 1, in <module> Datei "<input>", Zeile 3, in auto RuntimeError: Could not open '/home/pecesaquadros /Desktop/T//home/pecesaquadros/Desktop/T/P1050289.JPG' zum Lesen: Keine solche Datei oder Verzeichnis
Siehe bearbeitete Antwort.
Danke Xenoid. Das gleiche Problem trat mit pdb.gimp_file_save (img, img.layers[0], dest_folder + filename, dest_folder + filename) auf. Nachdem Sie beide repariert haben, sehen Sie, was passiert ... (siehe bearbeitete Frage).
Dein Code funktioniert bei mir irgendwie. Fügen Sie Druckanweisungen in Ihren Code ein (insbesondere um den Wert von img und img anzuzeigen). Dann können Sie sehen, welche Anweisung die Fehlermeldung erzeugt und welchen Wert img.ID hat, wenn dies passiert.
Ich werde weiter recherchieren. Um dies zu beenden und es zu Ende (oder zu einer Antwort ) zu bringen, werden Dateien überschrieben, nicht im Zielordner gespeichert.
Zeit für RTFM. Das Dokument von gimp-display-deletesagt: Diese Prozedur entfernt die angegebene Anzeige. Wenn dies die letzte verbleibende Anzeige für das zugrunde liegende Bild ist, dann wird das Bild ebenfalls gelöscht. Da dies auf Ihren Fall zutrifft, wird das Bild bereits gelöscht, wenn Sie versuchen, es mit zu löschen gimp-image-delete.
Zeit zu RTQ: In meinem Fall erscheint "manchmal und nur manchmal einer dieser beiden Fehler", unabhängig vom Ordner, unabhängig vom Bild, was auch immer ich tue. Außerdem habe ich erklärt: "Ich werde weiter nachforschen". Das Thema war jetzt das Überschreiben von Dateien. Vielen Dank für Ihren letzten wenig hilfreichen und unnötigen vulgären Kommentar.
*über das Abrufen von Dateien, die unter dest_folder gespeichert werden (und ich weiß, dass der tatsächliche Code Anweisungen zum Überschreiben enthält)