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.
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!
« Zurück
1
2
3
4
Weiter »