Open Source im professionellen Einsatz
Newsletter abonnieren
HEFTARCHIV | NEWS | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO

Partner-Links:
Shopping
Yatego Deutschlands größte Shoppingmall. 7000 Shops,
2.5 Mio Artikel. Alle Bestseller, Gutscheine und Liveshopping.

Firewall bei Mercateo kaufen.

Ein Preisvergleich bei Hardware lohnt sich.

Bei inkpool.de Laserdrucker und mehr bestellen.

Sie suchen günstige Laptops? Schauen Sie doch mal bei Preisvergleich.org, Preisvergleich.eu, Preisvergleich.ch und Preisvergleich.at vorbei.

Linux Jobs

Job offers Netherlands


user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2008  »  07  »  Farbenspiel  

RSS-Feed der aktuellen News von Linux-Magazin Online

© Pixelio.de, snopc

Diesen Artikel drucken Diesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren

Ein Perl-Skript als Retuscheur

Farbenspiel

von Michael Schilli
Erschienen im Linux-Magazin 2008/07

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.

Bevor ich Bilder von meiner digitalen Kamera ins Netz stelle, laufen seit Jahren immer die gleichen Schritte in Gimp ab: Erst verkleinere ich die Bilddatei auf 1000 Pixel Breite, denn die Auflösung meiner Nikon D70 ist schon fast zu hoch fürs Web. Zweitens versuche ich den Kontrast zu verbessern sowie eventuelle Farbstiche zu korrigieren und drittens verbessert die Gimp-Funktion »Sharpen« die Bildschärfe. Üblicherweise stelle ich dabei den Wert »20« ein.

Dabei bietet Gimp - wie schon einmal vor fünf Jahren im Snapshot beschrieben [3] - eine komfortable Skript-Schnittstelle, um diese immer wiederkehrenden Aktionen zu automatisieren und sogar ohne GUI von der Kommandozeile aus ablaufen zu lassen. Allerdings haben die Gimp-Entwickler seither das ganze API durcheinandergewirbelt und nichts funktioniert mehr wie früher. Zum Glück dokumentiert Gimp aber unter dem Menüpunkt »Xtns | Procedure Browser« sämtliche Funktionen vollständig und penibel. Ein dickes Bravo an das Gimp-Team!

Perl-Modul für Gimp

Die Standardschnittstelle ist in der verrückten Professorensprache Scheme geschrieben, zum Glück gibt es aber auch ein Perl-Modul. Zur Installation unter Ubuntu waren ein paar Tricks nötig, die ich weiter unten beschreibe. Danach lässt sich das Skript »picfix« (Listing 1) einfach mit »picfix file.jpg« starten. Es ruft Gimp auf und registriert mit »register()« die Funktion »picfix()« (Zeile 40).

Listing 1:
»picfix«

001 #!/usr/bin/perl
002 use warnings;
003 use strict;
004 
005 use Gimp qw(:auto);
006 use Gimp::Fu;
007 use ColorCast;
008 use Getopt::Std;
009 use Log::Log4perl qw(:easy);
010 
011 my $viewer = "eog";
012 
013 Log::Log4perl->easy_init($DEBUG);
014 
015 getopts("xl:c:a:s:", my %opts);
016 
017 $opts{a} ||= "green"; # color adjust
018 $opts{s} ||= "1000"; # size
019 $opts{l} ||= 1;    # autolevel
020 
021 DEBUG "Starting up";
022 
023 my $menu =
024   "<Toolbox>/Xtns/Perl-Fu/Picfix";
025 
026 my $file = $ARGV[0];
027 die "No file"
028    unless defined $file;
029 
030 register(
031  "perl_fu_picfix",  # Name
032  "Fix Colors and More", # Explain
033  "",         # Help
034  "",         # Author
035  "",         # Copyright
036  "",         # Date
037  $menu,        # Menu
038  "*",         # Images accepted
039  [ undef ],      # No parameters
040  &picfix       # Function
041 );
042 
043 exit main();
044 
045 ###########################################
046 sub picfix {
047 ###########################################
048 
049  my $img = gimp_file_load(
050    RUN_NONINTERACTIVE, $file, $file);
051 
052  die "Can't load $file" unless $img;
053 
054  my $layer = image_get_active_layer($img);
055 
056  scale_image_down($img, $opts{s});
057 
058  $layer = $img->get_active_layer();
059  if($opts{l}) {
060   DEBUG "Autolevel [$file]";
061   gimp_levels_stretch($layer);
062  }
063 
064  if($opts{c}) {
065   my $colorcast = ColorCast->new(
066    yml_file =>$opts{c},
067    drawable => $layer,
068   );
069   $colorcast->oad();
070   $colorcast->adjust_to($opts{a});
071  }
072 
073  DEBUG "Sharpening $file";
074  $img->plug_in_sharpen($layer, 20);
075 
076  $file =~ s/./-1./g;
077  $file =~ s/.nef$/.png/g;
078 
079  DEBUG "Saving $file";
080  gimp_file_save(
081   RUN_NONINTERACTIVE,
082   $img,
083   $layer,
084   $file,
085   $file);
086 
087  system("$viewer $file") if $opts{x};
088  return $img;
089 }
090 
091 ###########################################
092 sub scale_image_down {
093 ###########################################
094  my($img, $size) = @_;
095 
096  my $w = $img->image_width();
097  my $h = $img->image_height();
098 
099  if($w >= $h) {
100    if($w > $size) {
101      $h = int($h * $size/$w);
102      $w = $size;
103    } else {
104      return 1;
105    }
106  } else {
107    if($h > $size) {
108      $w = int($w * $size/$h);
109      $h = $size;
110    } else {
111      return 1;
112    }
113  }
114 
115  DEBUG "Resizing to $w x $h";
116  $img->image_scale($w, $h);
117 }

Die Gimp-Schnittstelle besteht seltsamerweise darauf, dass auch ein Skript, das nur auf der Kommandozeile läuft, einen vorgegebenen Menü-Eintrag erstellt, also tut »picfix« ihr ab Zeile 37 den Gefallen. In Zeile 43 ruft das Skript die Funktion »main()« auf, die in Gimp verzweigt und erst nach getaner Arbeit zurückkehrt. Das vorangestellte »exit()« stellt sicher, dass sich das Skript mit dem Returncode von »main()« verabschiedet.

Abbildung 1 zeigt das Originalbild, eine Aufnahme von meinem Balkon in San Francisco. Das Abendlicht kam von hinten und leuchtete die Stadt schön aus. Trotzdem waren die Farben im Original nicht ganz richtig. Nach dem Aufruf von »picfix« kam als Ergebnis das Bild in Abbildung 2 heraus. Der Kontrast ist deutlich besser und auch die Farben entsprechen ziemlich genau der Realität.

In der ab Zeile 46 definierten Funktion »picfix()« lädt die Funktion »gimp_file_load()« das Bild unter einem festgelegten Dateinamen. Ein Aufruf von »image_scale()« (Zeile 116) skaliert es auf 1000 Pixel Breite. Die Funktion »gimp_levels_stretch()« (Zeile 61) simuliert dann den »Auto«-Knopf des Gimp-Dialogs »Levels« und maximiert den Kontrast.

Die Methode »plug_in_sharpen()« (Zeile 74) verbessert die Bildschärfe und »gimp_file_save()« (Zeile 80) speichert die Datei unter »file-1.jpg« im ursprünglichen Format. Es ist also egal, ob das Bild als JPG oder PNG vorliegt, die Load/Save-Methoden übergeben intern die Kontrolle an die Routinen fürs passende Bildformat.

Das Laden der Module mit »use Gimp qw(:auto)« und »use Gimp::Fu« importiert alle Gimp-Funktionen in den Namensraum des Skripts. Auch Gimp-Konstanten wie »RUN_NONINTERACTIVE« schleust das »:auto«-Tag zur Freude des Programmierers mit ein.


Abbildung 1: Das Originalbild hat einen leichten Farbstich und der Kontrast ist ebenfalls verbesserungsbedürftig.


Abbildung 2: Das mit dem Perl-Skript »picfix« korrigierte Bild zeigt natürlichere Farben und hat einen höheren Kontrast.

Optionen

Die Bildskalierung ist auf 1000 Pixel voreingestellt (Zeile 18), aber die Kommandozeilenoption »-s« (size) ermöglicht beliebige Werte. Die maximale Größe bezieht sich bei querformatigen Bildern auf die Breite, bei hochformatigen aber auf die Höhe. Die Funktion »scale_image_down()« ab Zeile 92 enthält die dazu notwendige If-else-Logik.

Wer nach getaner Arbeit sein Werk gleich ansehen möchte, kann es über die Option »-x« (für X-Window) mit dem in Zeile 11 eingestellten Viewer (Eye of Gnome, »eog«) ansehen. Und wer auf die Autolevel-Funktion verzichten möchte, die nicht immer zufriedenstellende Ergebnisse liefert, bewerkstelligt dies mit der Option »-l 0« (Zeile 19).

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Diese Seite zu Mister Wong hinzuf�gen Webnews yigg it! Slashdot it! Twittern!
Ähnliche Artikel
Alter geht vor Schönheit Perl automatisiert Bildverarbeitung mit Gimp
Hingucker für Spekulanten Perl-Applets erweitern plattformunabhängiges Desktop-Panel
Schnellstart At Your Fingertips: Perl startet Programme nach Namen
Setzkästen Linux-Schriftenmanager im Test
Foto-Labor Gimp mit Perl automatisieren
Runter kommen sie alle Spielerische Fallschirmflug-Simulation mit Perl
Whitepaper
Usage Landscape Enterprise Open Source Data Integration

Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.

Download PDF (Registrierung erforderlich)
Daten Migration - Eine Publikation von Bloor Research

Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.

Download PDF (Registrierung erforderlich)
Kommentare (0)
 

Impressum |Datenschutzerklärung | © 2010Linux New Media AG
Partner-Sites
Deutschland: [Admin-Magazin] [LinuxUser] [EasyLinux] [Linux-Community] [Linux Technical Review] [Ubuntu User]
Europa: [EasyLinux Polen] [Linux Magazine Polen] [Linux Magazine Spanien]
International: [Linux Magazine International] [Linux Pro Magazine] [Ubuntu User] [Linux Magazine Brasilien] [EasyLinux Brasilien]