Tonung von Bildern in Gimp mit Python
Mehrere Bilder (ein ganzes Verzeichnis) sollen mit einer Tonung (z.B. Sepia) versehen werden. Auch dieses Beispiel kann wieder direkt in der Python-Konsole von Gimp genutzt werden.
Die Grundlagen (also der Modulimport) ist identisch mit denen der Bildskalierung in Gimp. Die zu verarbeitenden Bilder liegen im temp-Verzeichnis des Users.
import os
import glob
os.chdir(os.path.join(os.path.expanduser('~/'), 'temp'))
files = glob.glob('*.jpg')
Die Liste der Dateien wird folgenden Aktionen unterzogen:
- Bild laden
- eine Kopie des Bildes anlegen (ist hier eigentlich überflüssig)
- die Vordergrundfarbe wird auf den gewünschten Wert gesetzt
- es wird ein neuer Layer eingefügt (dafür sind zwei Funtkionsaufrufe nötig!)
- der neue Layer wird gefüllt
- das Bild wird zum Speichern auf eine Ebene reduziert
- nach dem Speichern werden die Daten aus dem Speicher entfernt
for f in files:
image = pdb.file_jpeg_load(os.path.join(srcpath, f), '')
workimg = pdb.gimp_image_duplicate(image)
pdb.gimp_context_set_foreground((0xa2, 0x8a, 0x65))
color_layer = pdb.gimp_layer_new(workimg, nw, nh, RGB_IMAGE, 'color', 100.0, COLOR_MODE)
pdb.gimp_image_add_layer(workimg, color_layer, -1)
new_drawable = pdb.gimp_image_get_active_drawable(workimg)
pdb.gimp_bucket_fill(new_drawable, FG_BUCKET_FILL, NORMAL_MODE, 100.0, 255.0, True, 0, 0)
pdb.gimp_image_flatten(workimg)
drawable = pdb.gimp_image_get_active_drawable(workimg)
targetf = "sepia_" + f
pdb.file_jpeg_save(workimg, drawable, targetf, targetf, 0.91, 0, 1, 0, "created with gimp-python", 0, 1, 0, 1)
pdb.gimp_image_delete(workimg)
pdb.gimp_image_delete(image)
Alternative Methoden
Es gibt auch die Funktion pdb.plug_in_sample_colorize() Allerdings ist es mit damit nicht gelungen Bilder über Python-Fu mit einer Tonung zu versehen. Vielleicht hat da jemand einen Tipp?