Home / LinuxUser / 2002 / 09 / Netpbm-Tools und Shell-Skripte

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Auf Kommando animiert

Netpbm-Tools und Shell-Skripte

Filter in Ketten

Die folgenden Arbeitsschritte verfremden das Testbild mit einigen Filterkommandos. Zuerst wandelt folgender Befehl das Bild in Graustufen:

ppmtopgm glass.ppm > glass.pgm

Wie jeder andere Filter aus dem Netpbm-Paket schreibt ppmtopgm das Ergebnis auf die Standardausgabe, die wir mit dem Größer-als-Zeichen > in eine neue Datei glass.pgm umleiten. Das Ergebnis zeigt Abbildung 2.

Abbildung 2: Plötzlich ist alles grau

Um für weitere Filterschritte unnötige Temporärdateien zu vermeiden, nutzen wir nun aus, dass die Netpbm-Programme von der Standardeingabe lesen können. Damit ist es möglich, mehrere Filter mit Pipes in der Shell hintereinander zu schalten:

ppmtopgm glass.ppm | pgmoil -n 5 | pgmtoppm Blue-White > oil.pgm

Die Ausgabe von ppmtopgm wird dabei direkt an pgmoil weiter gereicht. Dieser Filter versieht das Bild mit einem Effekt, der die Konturen wie in einem Ölbild verlaufen lässt. Die pgmoil-Option -n 5 teilt dem Filter mit, den Öl-Effekt auf Felder von je 5 mal 5 Pixeln anzuwenden.

Um wieder Farbe ins Bild zu bringen, reiht sich ein weiterer Filter (pgmtoppm) in die Kette ein, der die Graustufen auf einen Blau-Weiß-Verlauf abbildet. Das Resultat sehen Sie in Abbildung 3.

Abbildung 3: "Blaupause", Öl auf TFT, 2002

Laufen lernen

Einzelne Filter von der Kommandozeile aus aufzurufen ist zwar ganz nett, doch viele Stärken der Kommandozeilentools nutzen erst Shell-Skripte richtig aus. Damit können Sie in einem Rutsch ganze Sammlungen von Bilddateien durch die gleiche Filterkette schicken oder einfach nur in ein anderes Format bringen.

Doch woher die Bilderflut nehmen? Auch hier hilft Povray mit dem bereits angesprochenen Animationsfeature. Mit dem Kommando

povray +i glass.pov +w240 +h180 +fp +a0.1 +kfi00 +kff49 +kc

bringen Sie den Raytracer dazu, eine Animationssequenz von 50 Bildern zu berechnen. Die Bilddateien heißen glass00.ppm, glass01.ppm bis glass49.ppm. Entsprechend stehen die Optionen +kfi und +kff für die Nummern des ersten bzw. letzten Bildes. Die Option +kc zeigt an, dass es sich um eine zyklisch wiederholte Animation handelt.

Nun soll aus den Einzelbildern ein animiertes GIF-Bild zum Einbau in eine Web-Seite entstehen. Damit die GIF-Datei nicht zu groß wird, bietet sich eine Verkleinerung der Bildabmessungen auf 100 mal 75 Pixel an. Das Shell-Skript mkgifanim (Listing 2) bewältigt diese Aufgabe und ruft abschließend das Tool whirlgif auf, das die GIF-Einzelbilder zum animierten GIF zusammenklebt.

Listing 2

mkgifanim

#!/bin/bash
for f in glass??.ppm
do
  pnmscale -w 100 $f | ppmquant 256 | ppmtogif > ${f%.ppm}.gif
done
whirlgif -o g_anim.gif -loop -time 8 glass??.gif

In der for-Schleife durchläuft die Variable f alle Dateinamen, die auf das Shell-Muster (siehe Kasten 1) glass??.ppm passen. In der Filterkette skaliert pnmscale das jeweilige Bild auf 100 Pixel Breite. Die Höhe wird entsprechend dem Seitenverhältnis mitskaliert. Den nächsten Schritt besorgt ppmquant, das die Farbanzahl auf die für GIF maximalen 256 Farben reduziert. Schließlich schreibt ppmtogif das eigentliche GIF-Bild. Den neuen Dateinamen konstruiert das Skript dabei aus dem aktuellen Inhalt der Variable f, wobei es .ppm als Endung abschneidet und .gif als neue Endung anhängt. Der nachfolgende whirlgif-Aufruf erzeugt die Animation g_anim.gif, die durch die Option -loop endlos wiederholt wird und durch -time 8 zwischen den Bildern 8 Millisekunden Pause lässt. In Abbildung 4 sehen Sie die Animation, wenn Sie dieses Heft mit Daumenkino-Plugin gekauft haben. Im Ernst: Die Datei befindet sich auch auf der Heft-CD und lässt sich in einem Web-Browser oder xanim betrachten.

Abbildung 4: Animation

Kasten 1: Shell-Muster

Die Shell kennt bestimmte Muster für Datei- und Verzeichnisnamen, die sie vor dem Aufruf des entsprechenden Kommandos expandiert. Die wichtigsten sind

  • das Fragezeichen ?. Es steht für genau ein beliebiges Zeichen.
  • der Stern *. Er dient als Joker für beliebig viele (auch null) beliebige Zeichen.
  • Zeichenaufzählungen in eckigen Klammern []. An der entsprechenden Stelle muss genau eines der umklammerten Zeichen stehen. Dabei gibt es verschiedene Schreibweisen, die die folgenden Beispielen verdeutlichen: Das Muster lx[acE].txt passt auf die Namen lxa.txt, lxc.txt und lxE.txt.
  • graph[a-z][0-9][0-9].jp? passt (unter anderem) auf die Namen graphi50.jpg, grapho01.jpg und graphx55.jpe. Der Bindestrich innerhalb der eckigen Klammern sorgt dafür, dass ein ganzer Zeichenbereich gemeint ist, also alle Kleinbuchstaben von a bis z bzw. alle Ziffern von 0 bis 9.

Das Muster [^abc][xyz].b* passt (unter anderem) auf wy.b und 3x.ball, aber nicht auf cz.bmg oder rx.img. Das Dach ^ nach der einführenden Klammer steht für Negation, gemeint sind also alle Zeichen außer den nachfolgend aufgelisteten.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...