Open Source im professionellen Einsatz
Linux-Magazin 04/2009
© Andybahn, Photocase.com

© Andybahn, Photocase.com

Perl automatisiert Bildverarbeitung mit Gimp

Alter geht vor Schönheit

Das Fotomanipulationsprogramm Gimp hilft nicht nur dabei, Fotos optisch aufzubrezeln, es beherrscht auch den umgekehrten Fall: Aus brandneuen Digitalbildern macht es nostalgisch angehauchte Fotos mit dem typischen Gelbstich.

701

100 Jahre alte Schwarz-Weiß-Bilder fallen durch eine gelbliche Tönung auf. Besonders an den ursprünglich schwarzen Stellen hat der Zahn der Zeit genagt und sie braun gefärbt, aber auch die helleren Töne weisen einen leichten Gelbstich auf. Als ich vor Kurzem aus meinem Domizil, dem bunten Amerika, einen Abstecher in meine alte Heimat Deutschland unternahm, kam mir die Idee, einige auf der Reise mit der Digitalkamera aufgenommene Farbbilder (Abbildung 1) spaßeshalber in Schwarz-Weiß umzuwandeln und künstlich zu altern (Abbildung 2). Die so genannte Sepia-Tönung alter Fotografien rührt laut Wikipedia [4] von einem Pigment her, das sich ab dem späten 19. Jahrhundert in Fotografien findet. Man gewann es aus einem im Ärmelkanal heimischen Fisch, der mit lateinischem Namen Sepia officinalis heißt.

Abbildung 1: Dies ist das mit einer modernen Digitalkamera aufgenommene Originalfoto, das der hier entwickelte Filter verfremden soll.

Abbildung 2: Ergebnis: Das mit Gimp künstlich gealterte Schwarz-Weiß-Foto mit Gelbstich. Dank des Skripts lassen sich ganze Bildserien so bearbeiten.

Neue Fotos - fischgelb

Um diesen Effekt auch bei neuen Digitalaufnahmen zu erzielen, versetzt der Bildkünstler vor allem die dunklen Teile eines Bildes mit einem hellen Gelb-Braun-Ton (Abbildung 3). Die Bildteile mittlerer Helligkeit sind weniger betroffen und helle Stellen fast überhaupt nicht.

Abbildung 3: Sepia ist ein heller Gelb-Braun-Ton mit dem RGB-Wert [162,138,101]. Der Name stammt von einem Fisch, aus dem man ein Pigment gewann.

Es reicht also nicht, einem Bild die Farbinformationen zu entziehen und es anschließend gelblich einzufärben - der täuschend nachgemachte Effekt erfordert subtilere Maßnahmen. Eric Jeschke hat auf [3] eine Reihe von Gimp-Operationen zusammengestellt, die verblüffend echt aussehende Vorkriegsbilder produzieren. Mit dem Perl-Modul »Gimp« vom CPAN lassen sich die Einzelschritte in ein Perl-Skript packen, das der Nostalgiefreund ohne nennenswerten Arbeitsaufwand auf ganze Fotoreihen loslassen kann.

Durch die Brust ins Auge

Das Skript »sepiafy« in Listing 1 nimmt auf der Kommandozeile eine Bilddatei entgegen, unterwirft sie einer Reihe von Transformationen und spuckt anschließend ein künstlich gealtertes Schwarz-Weiß-Bild mit Gelbstich aus. Der Aufruf »sepiafy bild.jpg« erzeugt die Ergebnisdatei »bild-sepia.jpg«. Die lässt sich anschließend mit einem Image-Viewer wie zum Beispiel »eog« (Eye of Gnome, [7]) betrachten.

Listing 1:
»sepiafy«

01 #!/usr/bin/perl
02 use warnings;
03 use strict;
04
05 use Gimp qw(:auto);
06 use Gimp::Fu;
07 use Getopt::Std;
08 use Log::Log4perl qw(:easy);
09
10 Log::Log4perl->easy_init($DEBUG);
11 DEBUG "Starting up";
12
13 my $menu =
14     "<Toolbox>/Xtns/Perl-Fu/Sepiafy";
15
16 my $file = $ARGV[0];
17 die "No file"
18       unless defined $file;
19
20 register(
21   "perl_fu_sepiafy",   # Name
22   "Sepia Toning",      # Explain
23   "",                  # Help
24   "",                  # Author
25   "",                  # Copyright
26   "",                  # Date
27   $menu,               # Menu
28   "*",                 # Images accepted
29   [ undef ],           # No parameters
30   \&sepiafy            # Function
31 );
32
33 exit main();
34
35 ###########################################
36 sub sepiafy {
37 ###########################################
38
39   my $img = gimp_file_load(
40       RUN_NONINTERACTIVE, $file, $file);
41
42   die "Can't load $file" unless $img;
43
44   my $layer = image_get_active_layer($img);
45
46   DEBUG "Desaturate";
47   $layer->desaturate_full(2);
48     # 2: Average
49
50   my $sepia_mask = $layer->layer_copy(1);
51     # 1: Add Alpha Channel
52   $sepia_mask->layer_set_mode(COLOR_MODE);
53
54     # Insert layer above active layer
55   $img->image_add_layer($sepia_mask, -1);
56
57   gimp_context_set_foreground(
58                        [162, 138, 101] );
59   $sepia_mask->drawable_fill(0);
60     # 0: FOREGROUND-FILL
61
62   DEBUG "Adding layer mask";
63   my $layer_mask =
64          $sepia_mask->layer_create_mask(0);
65            # 0: White mask
66   $sepia_mask->layer_add_mask(
67                              $layer_mask );
68
69   $layer->edit_copy();
70
71   my $float = $layer_mask->edit_paste(0);
72     # 0: Clear selection 1: Paste behind it
73   $float->invert();
74   $float->floating_sel_anchor();
75
76   DEBUG "Flattening image";
77   $img->flatten();
78   $layer = $img->get_active_layer;
79
80   $layer->curves_spline(HISTOGRAM_VALUE,
81                   [0,0, 58, 36, 255, 255]);
82
83   $file =~ s/./-sepia./g;
84   DEBUG "Saving $file";
85   gimp_file_save(
86     RUN_NONINTERACTIVE,
87     $img,
88     $layer,
89     $file,
90     $file);
91
92   return $img;
93 }

Wie schon einmal in [5] erläutert, verlangen Gimp-Skripte zunächst einige bürokratische Verwaltungsmaßnahmen, damit sie Kontakt mit dem Bildverarbeitungsprogramm aufnehmen können. Die in Zeile 20 aufgerufene Funktion »register()« definiert einen Namen, einen Menü-Eintrag und noch weitere, in der Kommandozeilenversion eigentlich unnütze Angaben wie Autor und Hilfetext. Die Zeile 33 ruft schließlich mit »main()« das Gimp-Programm auf, das wiederum, wegen des Eintrags in Zeile 30, die ab Zeile 36 definierte Funktion »sepiafy()« startet. Also von hinten durch die Brust direkt ins Auge!

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Rattenscharf

    Was macht eigentlich ein digitales Bild scharf? Eine verständliche Erklärung der Prinzipien und ein Perl-Plugin für Gimp helfen dem digitalen Hobbyfotografen dabei, Schnappschüsse professionell aufzupolieren.

  • Foto-Labor

    Gimp, das GNU Image Manipulation Program, verbessert und manipuliert digitale Bilder mit anspruchsvollen Filterfunktionen. Statt immer wieder die gleichen Manöver mit der Maus auszuführen, lassen sich die Vorgänge mit Gimps Perl-Schnittstelle sogar automatisieren.

  • Farbenspiel

    Oft benötigen ganze Serien digitaler Bilder dieselben Korrekturen, was den Fotografen zu immer gleichen Schritten in Gimp zwingt. Viel bequemer kommt zum Ziel, wer die Retusche automatisiert.

comments powered by Disqus

Ausgabe 04/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.