AA_motor_slulesoj_sxc_656726.jpg

© Slulesoj, sxc.hu

Bildverarbeitung mit den Skriptsprachen Perl und Python

Mehr Motorkraft

Mit nur wenigen Zahlen Code korrigieren Sie das Format digitaler Bilder, passen die Metadaten an oder beschriften die Fotos für den Upload in ein Online-Album.

Serie "Automatische Bildverarbeitung"

Teil 1: ImageMagick, GraphicsMagick LU 03/2011, S. 84 http://www.linux-community.de/22947
Teil 2: Magick Scripting Language LU 06/2011, S. 84 http://www.linux-community.de/22948
Teil 3: Bearbeiten mit Perl/Python LU 07/2011, S. 90

In den ersten beiden Teilen der Artikelserie ([1],[2]) kamen die beiden Werkzeuge ImageMagick [3] und GraphicsMagick [4] zum Einsatz. In kleinere Shell-Skripte integriert, leisteten Sie dort gute Dienst. Zu beiden Werkzeugen gehören mächtige Bibliotheken, für die wiederum Bindings zu verschiedenen Programmiersprachen existieren.

Programmierschnittstellen

Wer also statt in der Shell zu arbeiten lieber seine Lieblingsprogrammiersprache zum Lösen der Aufgabe einsetzen möchte, dem stehen viele Möglichkeiten offen. Für ImageMagick und GraphicsMagick gibt es Schnittstellen unter anderem für C/C++, Perl, Java, Python, Ruby und Tcl. Diese sind erfreulicherweise vollständig, aktuell und verständlich dokumentiert.

In diesem Artikel drehen sich die Beispiele um die Bildmanipulation mit den beiden Skriptsprachen Perl und Python. Beide gehören zur Kategorie der Skriptsprachen. Vor dem Ausführen transponiert ein Interpreter den Programmcode in Bytecode. Das eigentliche Übersetzen erfolgt erst zur Laufzeit, sie brauchen im Vorfeld also nichts zu kompilieren. Das Binding für Perl heißt PerlMagick [5], das für Python PythonMagick [6].

Das erste Beispiel widmet sich PerlMagick. Das dafür erforderliche Debian/Ubuntu-Paket trägt den Namen libgraphics-magick-perl. Nach der Installation des Paketes binden Sie das Perl-Modul über die folgende Deklaration in ein Skript ein:

use Graphics::Magick;

Nun stehen die Klassen und Funktionen aus diesem Modul bereit. Der Code aus Listing 1 dient dazu, die Bildinformationen anzuzeigen. Die Namen der Dateien geben Sie dem Skript als Parameter beim Aufruf mit.

Listing 1

#!/usr/bin/perl -w
# bildinfo.pl - Bildinformationen anzeigen
# GraphicsMagick-Modul einbinden
use Graphics::Magick;
# Abbrechen, falls keine Dateien als Parameter übergeben wurden
exit unless @ARGV;
my ($dateiname, $farbraum, $format, $hoehe, $breite);
foreach (@ARGV) {
  $dateiname = $_;
  $bild = Graphics::Magick->new;
  $bild->Read ($dateiname);
  ($farbraum, $format, $hoehe, $breite) = $bild->Get('colorspace', 'format', 'height', 'width');
  print "Datei:  ", $dateiname, "\n";
  print "Format: ", $format, "\n";
  print "Größe:  ", $breite, "x", $hoehe, "\n";
  print "Modus:  ", $farbraum, "\n";
  print " \n";
}

Jede Datei, die Sie beim Aufruf als Parameter übergeben, berücksichtigt das Programm (Zeile 10). Geben Sie keine Dateien an, bricht das Programm bereits vorher ab (Zeile 7). Für einen besseren Programmierstil wäre stattdessen eine Funktion usage_exit() angebracht, die den Anwender auf fehlende Argumente hinweist. Der Aufruf in Zeile 7 müsste dann wie folgt lauten:

usage_exit() unless @ARGV

Zeile 12 erzeugt ein neues Grafikobjekt, über dessen Methoden Sie später auf die Dateien zugreifen. In der Zeile 13 öffnen Sie die Bilddatei und bestimmen danach den Bildtyp, die Bildgröße und den Farbmodus. In den Zeilen 17 bis 20 erfolgt die Ausgabe der Bildwerte, in Listing 2 beispielhaft dargestellt am Aufruf für das Polaroid-Bild aus dem ersten Teil dieser Artikelserie.

Listing 2

$ ./bildinfo.pl polaroid.png
Datei:  polaroid.png
Format: Portable Network Graphics
Größe:  296x243
Modus:  RGB

Statische Beschriftung

Im zweiten Beispiel für den Alltagsgebrauch erhalten die Aufnahmen einen Schriftzug. Auf diese Weise versehen Sie ein Bild mit dem Namen des Fotografen oder einer Beschreibung zum Motiv. Sinnvoll ist das für Bilder, die Sie über ein Online-Album oder eine Fotodatenbank im Internet bereitstellen. Hier schützt ein sichtbares Zeichen der Urheberschaft vor Missbrauch. Bei der heutzutage erzeugten Menge digitaler Aufnahmen hilft ein Kommentar dabei, zu einem späteren Zeitpunkt Ort und Datum der Aufnahme zuzuordnen.

Beim Beschriften kommt die Methode Annotate der Magick-Klasse zum Einsatz, der Sie den Text als Parameter übergeben (Listing 3). Diese Methode akzeptiert zusätzlich als Parameter verschiedene Attribute, wie zum Beispiel die Schriftart, die Schriftgröße und die Schriftfarbe. Für die Schriftart erwartet die Methode den vollständigen Pfad zur Fontdatei. Im Beispiel erfolgt die Ausgabe des Textes mittels der (fiktiven) Truetype-Datei font.ttf mit einer Schriftgröße von 40 Punkt in roter Farbe.

Listing 3

$text = 'Ostseeurlaub 2011';
$bild->Annotate (font=>'font.ttf', pointsize=>40, fill=>'red', text=>$text, x=>100, y=>100);

Der Text landet auf dem Bild an einer Position, die Sie über ein Koordinatenpaar für die waagerechte X- und senkrechte Y-Achse festlegen. Der Ursprung des Koordinatensystems befindet sich in der linken oberen Ecke des Bildes. Von da aus berechnet sich die Position in Pixeln. Um das veränderte Bild zu speichern, nutzen Sie die Write-Methode des Bild-Objektes:

$bild->Write(filename=>$dateiname);

Der Einfachheit halber speichern Sie das Skript, dessen Aufbau im Wesentlichen jenem von Listing 1 ähnelt, unter dem Namen schriftzug.pl ab (Listing 4). Sie rufen es mit folgenden Kommando auf, um ein PNG-Bild mit dem Schriftzug zu versehen:

$ ./schriftzug.pl foto.png

Abbildung 1 zeigt ein Bild nach dem Bearbeiten. Es kommt problemlos mit UTF-8-kodierten Umlauten und Sonderzeichen zurecht. Das Skript funktioniert auch, wenn Sie beim Aufruf eine ganze Serie von Bildern übergeben, die Sie identisch beschriften möchten – beispielsweise alle Aufnahmen einer Reise oder Veranstaltung.

Abbildung 1: Dank eines einfachen Perl-Skriptes versehen Sie alle Urlaubsfoto auf einen Rutsch mit einem passenden Kommentar.

Dabei hilft Ihnen die Art und Weise, wie Digitalkameras die Aufnahmen im Dateisystem der Speicherkarte der Kamera benennen. Als Dateiname für ein Bild verwenden aktuelle Modelle eine Kombination aus Buchstaben und Ziffern. Während die Abfolge der Buchstaben sich je nach Hersteller unterscheidet, geben die Ziffern in aller Regel die fortlaufende Nummer an, beispielsweise IMG0176.PNG für die 176. Aufnahme. Besteht die Bildserie aus den sechs Dateien (IMG0023.PNG bis IMG0028.PNG), sieht der Aufruf wie folgt aus:

$ ./schriftzug.pl IMG002[3-8].PNG

Die Shell wertet zunächst die Eingabezeile aus und findet dabei den regulären Ausdruck. Sie expandiert die Werte in den eckigen Klammern als einzelne Ziffern 3 bis 8 und kombiniert diese mit dem umgebenden Text zum Dateinamen. Anschließend erhält das Skript diese als Parameter.

Listing 4

#!/usr/bin/perl -w
# schriftzug.pl - Bilder statisch beschriften
# GraphicsMagick-Modul einbinden
use Graphics::Magick;
# Abbrechen, falls keine Dateien als Parameter übergeben wurden
exit unless @ARGV;
my ($dateiname, $text, $bild);
foreach (@ARGV) {
  $dateiname = $_;
  $bild = Graphics::Magick->new;
  $bild->Read ($dateiname);
  $text = 'Albi (Tarn), Midi-Pyrénées, 2008 - Frank Hofmann';
  $bild->Annotate (font=>'font.ttf', pointsize=>40, fill=>'red', text=>$text, x=>100, y=>100);
  $bild->Write(filename=>$dateiname);
}

LinuxCommunity kaufen

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

Deutschland

Ähnliche Artikel

  • Bildbearbeitung mit ImageMagick
    Wer nicht 1000 Urlaubsbilder von Hand skalieren, normieren, beschneiden oder mit Wasserzeichen versehen möchte, für den führt kein Weg an der Werkzeugsammlung ImageMagick vorbei.
  • Am laufenden Band
    Kommandozeilenprogramme zur Bildbearbeitung punkten gegenüber den Tools mit grafischer Oberfläche durch einen entscheidenden Vorteil: Sie bieten vor allem beim Bearbeiten mehrerer Bilder deutlich mehr Flexibilität.
  • Profi-Funktionen von ImageMagick nutzen
    Vom Konvertieren von Negativen bis hin zum PDF fürs Fotobuch – mit ImageMagick und ein paar Zeilen Shell-Code meistern Sie jede Aufgaben ruck, zuck auf der Kommandozeile.
  • Bilder verarbeiten mit der Magick Scripting Language
    Die Magic Srcipting Language hilft Ihnen, Bilder mit einem fest definierten Satz an Parametern zu bearbeiten. In Verbindung mit geschickter Shell-Programmierung nutzen Sie so die Ressourcen eines Systems optimal aus.
  • Halbautomatische Nachbearbeitung von Fotoserien
    Immer dann, wenn es um die Bearbeitung hunderter, im JPEG-Format abgelegter Fotos geht, ist GIMP nicht der Weisheit letzter Schluss. Hier spielen speziell Kommandozeilenprogramme ihre Stärken aus.
Kommentare

Infos zur Publikation

LU 08/2016: Multimedia

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...
Probleme beim Hochfahren der Terastaion 5400 mit Unix-Distrib
Sheldon Cooper, 10.07.2016 09:32, 0 Antworten
Hallo ihr lieben, habe seit zwei Tagen das Problem, das das NAS (Raid5) nicht mehr sauber hoch...
Mit Firewire Videos improtieren?
Werner Hahn, 09.06.2016 11:06, 5 Antworten
Ich besitze den Camcorder Panasonic NV-GS330, bei dem die Videos in guter Qualität nur über den 4...
lidl internetstick für linux mint
rolf meyer, 04.06.2016 14:17, 3 Antworten
hallo zusammen ich benötige eure hilfe habe einen lidl-internetstick möchte ihn auf linux mint i...