Python in Gimp: Channel-Mixer
Mit dem Channel-Mixer (Colors - Components - Channel-Mixer / Farben - Komponenten - Kanalmixer) lassen sich in Gimp aus Farbbildern besser Schwarzweissbilder erzeugen als über die Funktion Desaturate (Colors - Desaturate / Farben - Entättigen). Die individuellen Möglichkeiten sind viel besser.
In Python-Fu bzw. in dem Procedure Browser wird die Funktion allerdings ohne das Flag Preserve luminosity (Leuchtstärke erhalten) aufgeführt, man kann dies also nicht in einem Script setzen (Falls ich da falsch liege bitte ich um Nachricht).
Was macht also dieses Flag?
Eine Suche im Internet fördert folgendes zutage: Die Summe der einzelnen
Kanalwerte wird auf 100% begrenzt, egal was dort eingestellt wird.
Sollten alle Kanäle (Rot, Grün; Blau) gleich berücksichtigt
werden dann wäre bereits bei 33,3% pro Kanal diese Bedingung erfüllt.
Also müssen die einzelnen Werte nur vor dem Aufruf der Funktion plug_in_colors_channel_mixer umgerechnet werden.
def channel_mixer(workimg, rg, gg, bg, blacknwhite=True): """ Umrechnung der einzelnen Werte pro Farbkanal um das Verhalten des Flags "preserve luminosity (Leuchtstärke erhalten) in Python-Fu nachzuempfinden. Summe der Kanalwerte bilden und dann die einzelnen Werte als Teil von 100% berechnen. """ channel_sum = rg + gg + (bg * 1.0) rg /= channel_sum gg /= channel_sum bg /= channel_sum drawable = pdb.gimp_image_get_active_drawable(workimg) pdb.plug_in_colors_channel_mixer(workimg, drawable, blacknwhite, rg, gg, bg, rg, gg, bg, rg, gg, bg)Die Funktion chanel_mixer kann jetzt mit dem geladenen Bild und den gewünschten Werten für die Anteile Rot, Grün und Blau aufgerufen werden. z.B.:
import os # Das Bild soll im Homeverzeichnis des Users liegen srcdir = os.path.expanduser('~') filename = 'der Name des zu ladenen Bildes...' # Bild laden image = pdb.file_jpeg_load(os.path.join(srcdir, filename), '') # Darstellung des Bildes oeffnen pdb.gimp_display_new(image) # und konvertieren channel_mixer(image, 1.0, 2.0, 1.0)