Ebenen stapeln
Die darauf folgende Methode »layer_set_mode()« setzt den Modus der neuen Ebene auf »OVERLAY_MODE«, die Konstante hat das Skript wegen des »:auto«-Tags in Zeile 9 bequemerweise automatisch importiert. Diese Aktion entspricht der Wahl des Overlay-Modus im Layer-Dialog von Gimp. »image_add_layer()« in Zeile 60 fügt den neu erzeugten Layer zum Bild hinzu, der auf »-1« gesetzte Parameter stapelt ihn über die bestehende Basisebene.
Damit der Gimp-Benutzer bei lange dauernden Aktionen nicht die Nerven verliert, initialisiert »dreamify« mit »Gimp ->progress_init(" Titel")« eine Fortschrittsanzeige und aktualisiert sie nach den einzelnen Schritten mit »Gimp ->progress_update( Bruchteil)«. Bruchteil ist ein Fließkommawert zwischen 0 und 1 und gibt die Position des Fortschrittsbalkens an.
Zeile 63 skaliert das Bild auf 800 mal 600 Pixel, hierzu ruft sie die ab Zeile 89 definierte Funktion »scale_image_down« auf. Diese erwartet ein Image-Handle sowie die gewünschte Maximalgröße des Bildes und verändert das Bild direkt.

|
Abbildung 3: Der neue Perl-gesteuerte Menüpunkt »Dreamify« erscheint in Gimps Kontextmenü: Nach dem Maus-Rechtsklick muss der Anwender in das »Perl-Fu«-Untermenü wechseln.
|
Passend skalieren
Die Funktion berechnet zunächst, ob das Bild im Querformat statt - wie erwartet - im Hochformat vorliegt. In diesem Fall korrigiert sie die Maximalgröße auf 600 mal 800 Pixel. Überschreiten Breite und Höhe des Bildes ihren Maximalwert, wird das Bild mittels »image _scale« so verkleinert, dass die Bildproportionen erhalten bleiben.
Das Glätten des Bildes findet in Zeile 67 per »plug_in_gauss_iir« mit dem Gaussian-Blur-Algorithmus statt, der Unschärferadius beträgt 20. Die Funktion aktiviert sowohl horizontale also auch vertikale Unschärfe, dazu setzt das Skript die beiden letzten Parameter auf True. Zeile 72 schließlich hellt die Farben im Bild mit einem Gammafaktor von »1.5« etwas auf, Ein- und Ausgabebereiche bleiben mit 0 bis 255 konstant. Das entspricht einem etwas nach links verschobenen Intensity-Regler in Gimps »Image | Colors | Level«-Dialog. Anschließend fügt Zeile 75 die beiden Layer zu einem einzigen zusammen, Zeile 76 holt dessen Handle.
001 #!/usr/bin/perl
002 ###########################################
003 # dreamify - Gimp Image Dreamifier
004 # Mike Schilli, 2003 (m@perlmeister.com)
005 ###########################################
006 use warnings;
007 use strict;
008
009 use Gimp qw(:auto);
010 use Gimp::Fu;
011 use Pod::Usage;
012
013 use Log::Log4perl qw(:easy);
014 Log::Log4perl->easy_init($DEBUG);
015
016 my $menu = "<Toolbox>/Xtns/Mike/Dreamify";
017 my $jpg_file;
018
019 if(grep /-gimp/, @ARGV) {
020 # Call from within Gimp
021 $menu = "<Image>/Perl-Fu/Dreamify";
022 } else {
023 # Call from the command line
024 $jpg_file = $ARGV[0];
025 pod2usage("No file")
026 unless defined $jpg_file;
027 }
028
029 register(
030 "perl_fu_dreamify", # Name
031 "Dreamify a Picture", # Blurb
032 "=pod(HELP)", # Help
033 "=pod(AUTHOR)", # Author
034 "=pod(COPYRIGHT)", # Copy
035 "=pod(DATE)", # Date
036 $menu, # Menu
037 "", # Images accepted
038 [], # Parameters
039 [], # Return values
040 &dreamify # Function
041 );
042
043 ###########################################
044 sub dreamify {
045 ###########################################
046 my($img, $layer) = @_;
047
048 Gimp->progress_init("Dreamifying ...");
049
050 if(!$img) {
051 DEBUG "Loading $jpg_file";
052 $img = file_jpeg_load($jpg_file, "");
053 die "Can't load $jpg_file" unless $img;
054 $layer = image_get_active_layer($img);
055 }
056
057 DEBUG "Copying layer";
058 my $new_layer = $layer->layer_copy(0);
059 $new_layer->layer_set_mode(OVERLAY_MODE);
060 $img->image_add_layer($new_layer, -1);
061 Gimp->progress_update(.1);
062
063 scale_image_down($img, 800, 600);
064 Gimp->progress_update(.5);
065
066 DEBUG "Blurring";
067 $img->plug_in_gauss_iir($new_layer,
068 20.0, 1, 1);
069 Gimp->progress_update(.8);
070
071 DEBUG "Adjusting Colors";
072 $new_layer->gimp_levels(0, 0, 255, 1.5,
073 0, 255);
074
075 $img->flatten();
076 $layer = $img->get_active_layer;
077 Gimp->progress_update(1);
078
079 if($jpg_file) {
080 (my $png_file = $jpg_file) =~
081 s/.jpg$/.png/g;
082 DEBUG "Saving to $png_file";
083 $layer->file_png_save($png_file, "",
084 0, 6, (1) x 5);
085 }
086 }
087
088 ###########################################
089 sub scale_image_down {
090 ###########################################
091 my($img, $x, $y) = @_;
092
093 my $w = $img->image_width();
094 my $h = $img->image_height();
095
096 # Switch x,y if portrait
097 ($x, $y) = ($y, $x) if $w < $h;
098
099 DEBUG "Limits $x x $y";
100 DEBUG "Size $w x $h";
101
102 if($w > $x and $h > $y) {
103 my $new_h = int($h*$x/$w);
104 DEBUG "Resizing to $x x $new_h";
105 $img->image_scale($x, $new_h);
106 }
107 }
108
109 exit main;
110
111 __END__
112
113 =head1 NAME
114
115 Dreamify - Gimp Plugin for dreamy pictures
116
117 =head1 SYNOPSIS
118
119 dreamify file.jpg
120
121 =head1 HELP
122
123 Adds a second layer to a picture in
124 "Overlay" mode, lightens up the colors,
125 applies a Gaussian blur and rescales the
126 result to 800x600. Operates on the current
127 picture if called from within Gimp via
128 C<Rightclick/Perl-Fu/Dreamify>. If called
129 from the command line, it modifies the JPG
130 file specified, flattens the result and
131 writes it back as PNG.
132
133 =head1 AUTHOR
134
135 Copyright 2003 by Mike Schilli, all rights
136 reserved. This program is free software,
137 you can redistribute it and/or modify it
138 under the same terms as Perl itself.
|
| Whitepaper |
|
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)
|
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele
Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|