Zaubern mit Bildern auf der Shell
    ArticleCategory: [Es gibt verschiedene Artikel Kategorien]
    Graphics 
    AuthorImage:[Ein Bild von Dir]
    ![[Photo of the Author]](../../common/images/katjasocher.gif) 
 
    TranslationInfo:[Autor und Übersetzer]
    original in en Katja
    Socher 
en to de Katja Socher  
    AboutTheAuthor:[Eine kleine Biographie über den
    Autor]
    Katja ist die deutsche Redakteurin von LinuxFocus. Sie mag Tux, Film & 
    Fotografie und das Meer. Ihre Homepage befindet sich hier.
    Abstract:[Hier sollte eine kleine Zusammenfassung stehen]
    In diesem Artikel schauen wir uns einige Zaubersprüche an, die der
    ImageMagick Zauberer durch Benutzen einer Sammlung von graphischen
    Werkzeugen als Zutaten und der Shell als seinen Zauberstab, machen kann. 
    ArticleIllustration:[Das Titelbild des Artikels]
    ![[Illustration]](../../common/images/illustration211.jpg) 
 
    ArticleBody:
    Zaubern
    Früher nahmen die Zauberer ihre Zutaten, rührten sie in einem großen Topf
    zusammen, schwangen ihren Zauberstab, murmelten ihre Zaubersprüche... 
    und plötzlich war jemand in einen Frosch verwandelt. In unserer
    modernen Zeit sind die Zauberer wie jeder andere in unserer Gesellschaft
    hochspezialisiert und ihre Zauberbücher enthalten nur einige wenige
    brauchbare Zaubersprüche für sehr spezielle Aufgaben. Deshalb ist 
    ImageMagick kein Zauberbuch für den allgemeinen Gebrauch. In vielen Aspekten
    kann es mit The Gimp oder vielen anderen Graphikprogrammen nicht
    konkurrieren, aber es hat einige spezielle Features, die sehr nützlich sind.
    
    Seine wirkliche Stärke liegt in der Möglichkeit, viele seiner Prozesse zu
    automatisieren, wenn man auf der Shell arbeitet.
    
    Aber bevor wir dir jetzt einige Zaubersprüche verraten, laßt uns zuerst einen
    kurzen Blick auf die Zutaten werfen:
    Die Zutaten
    oder Was ist ImageMagick?
    ImageMagick ist eine Sammlung von graphischen Werkzeugen zum Bearbeiten von
    Bildern. Die Werkzeuge sind display, import, animate, montage, convert, mogrify,
    identify und combine.
     Display: Wenn man "display &" eintippt, erscheint ein
     display-Bildschirm und man kann direkt an den Bildern arbeiten. Über das
     Menü kann man eine Datei öffnen, abspeichern oder löschen, sie drehen oder
     rotieren, Änderungen an der Farbe vornehmen oder bestimmte Effekte, z.B.
     implode, emboss, anwenden, einen Rahmen um das Bild machen und mehr.
     Mit Import kann man Screenshots des gesamten Bildschirms oder von
     bestimmten Bildern oder Fenstern machen. 
     Animate ist ein Animationswerkzeug. Man kann eine Reihe von Bildern
     auswählen, die dann eines nach dem anderen gezeigt werden oder man kann
     sich eine gif-Animation anschauen. 
     Mit Montage kann man z.B. ein gefliestes Bild erstellen oder ein
     Bild, auf dem man alle einzelnen Bilder eines animierten gif- Bildes sehen
     kann.
     Convert ist ein sehr mächtiges Werkzeug. Man kann ein Bild in ein
     anderes Format umwandeln, z.B. ein gif Bild in ein jpg Bild oder umgekehrt,
     man kann die Größe des Bildes verändern und auch eine Menge Effekte, z.B.
     eine Kohlenzeichnung machen, auf die Bilder anwenden. 
     Mogrify ist sehr ähnlich zu convert mit dem großen Unterschied, daß
     man mit mogrify das bearbeitete Bild überschreibt, während man bei convert
     und den anderen Werkzeugen eine Datei angeben muß, in die das veränderte
     Bild gespeichert wird. Deshalb benutze ich es fast nie.
     Identify gibt dir Informationen über das Bild, wie seine Geometrie,
     Größe, Name, Format etc.
     Combine kombiniert zwei oder mehr Bilder zu einem neuen Bild. Man
     kann z.B. ein Logo in ein anderes Bild einfügen.
    
     Um die Werkzeuge zu benutzen, tippt man den Namen des Werkzeuges, gefolgt
     von der Option, die man benutzen will, das Bild das bearbeitet werden soll
     und den Dateinamen, unter dem das veränderte Bild gespeichert werden soll. 
     Z.B. wenn du aus tux1.gif eine Kohlezeichnung mit dem Faktor 3 machen
     und es unter  tux1characoal.gif abspeichern willst, schreibst du:
     convert -characoal 3 tux1.gif tux1characoal.gif
     
     Nachdem wir uns jetzt die Zutaten angeschaut haben, laßt uns jetzt ein paar
     Zauerbtricks probieren:
    Einige Zaubersprüche
    Verändern der Höhe und Breite deiner Bilder
    Stell dir vor, du hast einen Stoß Bilder mit den letzten Opfern, die du in
    einen Frosch verwandelt hast und du möchtest sie auf deine Webpage packen.
    Um die Ladezeit zu verkürzen, möchtest du deine Bilder verkleinern. .
    Mit convert kannst du deine Bilder vergrößern oder verkleinern oder
    Thumbnails daraus generieren. 
    Der Befehl 
convert -geometry 60x80 image.gif out.gif
    verändert das Bild image image.gif auf eine Breite von 60 und eine Höhe von
    80 und
 speichert das sich ergebende Bild in out.gif ab. 
    
    Um alle deine Bilder z.B. in einem Schritt auf eine Höhe und Breite von 80
    zu bringen, schreibst du: 
#!/bin/sh
for f in $* ;do
 convert -geometry 80x80 $f t_$f
 echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\"></a>"
done
# end of script
    (Tippe diese Zeilen in irgendeinen Texteditor deiner Wahl (vi, emacs,
    nedit, kedit...) und speichere sie unter mksmallimage in deinem home
    Verzeichnis. Dann gehe zur Bash shell und tippe
chmod 755 /home/katja/mksmallimage
    (benutzt den Namen deines home Verzeichnisses anstelle von katja). Dann
    kannst du das Skript durch
    Tippen von z.B. /home/katja/mksmallimage xxx.jpg *.gif benutzen. Es
    verändert alle gif Dateien plus die xxx.jpg Datei.)
    Erstellen von Überblicksbildern
    Du hast eine CD mit einer Sammlung aller Leute, die du in den letzten Jahren
    in Frösche verwandelt hast. Jetzt will dein rivalisierender Zauberer, der
    sehr neidisch auf dich ist, den Beweis, daß du sogar schon einmal seinen 
    Hund in einen Frosch verwandelt hast. Und jetzt verbringst du den ganzen Tag
    damit, nach diesem Foto zu suchen. Dies hätte vermieden werden können, wenn
    du ein Überblicksbild mit allen Bildern auf deiner CD gehabt hättest. Mit 
    Image Magick ist es sehr einfach, eins zu erstellen: 
display "vid:*.jpg" 
    Dies erstellt ein visual image directory von allen deinen jpg Bildern im
    aktuellen Verzeichnis. Oder: 
display "vid:frog/*" 
    erstellt ein visual image directory aller deiner Bilder im Verzeichnis frog. 
    Mit einem rechten Mausklick auf irgendeines der Bilder bekommt man ein Menü,
    wo man "Load" auswählen kann, um das Bild in seiner vollen Größe zu sehen. 
    
    
      ![[visual image directory]](../../common/images/article211/dir.jpg) 
    
    
    
    Dies ist ein sehr einfacher Weg, um ein Überblicksbild zu erstellen, aber
    abhängig von deinem Computer dauert es einige Zeit, bis das visual image
    directory erstellt ist und es verbraucht eine Menge Speicher, wenn man eine
    große Anzahl an Bildern hat. Deshalb werden wir jetzt ein kleines
    htmlthumbnails Skript schreiben, daß hierbei weniger verlangt und dann eine
    Webseite bauen, wo du auf jedes Thumbnail klicken kannst und das
    Originalbild erhälst. 
    
    Der html-Code hierfür sieht so aus: 
<a href="file.gif"><img src="t_file.gif" width="60" height="80"></a>
    Die Originaldatei ist hier file.gif und das Thumbnail ist t_file.gif.
    
   Jetzt schreiben wir ein Skript, daß die Thumbnails generiert und den
   html-Code für uns schreibt. 
for f in $* ;do
 convert -geometry 80x80 $f t_$f
 echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">"
done
    Das obige Skript läßt eine Schleife über alle Bilder laufen wie auf der
    Kommandozeile spezifiziert, generiert die Thumbnails und schreibt den
    html-Code auf den Bildschirm. Wir können den html-Code dann mit copy & paste
    in unsere Webseite schreiben. 
    Für das vollständige Shellskript fügen wir einen kleinen Hilfstext und eine
    Fehlerüberprüfung hinzu. Hier ist unser komplettes Shellskript,
    htmlthumbnails :
    
    htmlthumbnails
    (html zum Anschauen), htmlthumbnails
    (Text zum Herunterladen) 
     
    Verändern des Bildformats
    Convert kann nicht nur die Größe eines Bildes verändern, sondern auch sein
    Format. Z.B. kann man ein gif Bild in ein jpg Bild umwandeln und umgekehrt.
    Der Befehl dafür lautet einfach: 
convert image.gif image.jpg
    Convert erkennt an der Extension des Dateinamens welches Format es benutzen
    muß.
     Um das Bildformat einiger Bilder von jpg in gif zu verwandeln, benutze: 
for f in $* ;do
 if echo "$f" | grep -i "jpg$" > /dev/null ; then
   gif=`echo "$f" | sed 's/jpg$/gif/i'`
   echo "converting  $f to $gif ..."
   convert 80x80 $f $gif
 else
   echo echo "$f is not a jpg file, ignored"
 fi
done
    Es gibt auch noch eine Menge anderer Formate, die ImageMagick ebenfalls
    kennt. 
    Ein Logo in alle deine Bilder einfügen
    Wir würden gern ein kleines Logo, wie du es rechts sehen kannst, in eine
    Anzahl von Bildern einfügen. ![[linuxfocus stamp]](../../common/images/article211/lfstamp.gif) 
 
    
    Dieses Logo sollte ein kleines transparentes gif Bild sein. Unser Logo
    sollte wie eine kleine Signatur in der unteren rechten Ecke des Bildes
    plaziert sein, wie du es in dem folgenden Tuxbild sehen kannst: 
    
      
      ![[tux with logo]](../../common/images/article211/stamp_tux002.jpg) 
    
    
     Wie lautet der Befehl, um dies zu tun? 
    Combine kann dazu benutzt werden, um zwei Bilder in ein neues zu
    kombinieren. Verschiedene Optionen sagen dem Programm, wie es das tun muß: 
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpg
    Die Option "gravity SouthEast" plaziert das logo.gif in die untere rechte
    Ecke. "compose Over" sagt, daß wir das Bild an den
    Stellen, wo sie sich überlappen, durch das Logo ersetzen. 
    
    Um ein voll funktionierendes Shellskript zu bekommen, packen wir den Befehl
    in eine for-Schleife und fügen wieder einen kleinen Hilfetext und eine
    Fehlerüberprüfung hinzu. Hier ist unser komplettes Shellskript, 
    stampimages : 
    stampimages
    (html zum Anschauen), stampimages(Text zum Herunterladen)
     
     
    Informationen über die Bildeigenschaften erhalten
    Identify zeigt Details über den Typ deiner Bilder, ihre Größe und ihrer
    Geometrie an. Dies sieht z.B. wie folgt aus: 
identify  image.jpg
ergibt
image.jpg 340x254 DirectClass 13939b JPEG 0.1u 0:01
    Was kann unser Zauberer damit machen? Nun, um gute Webseiten zu designen,
    die schon Bilder zeigen, während die Seite noch geladen wird, sollte man die
    genaue Geometrie für alle Bilder angeben. Der html-Code dafür sähe z.B. so
    aus: 
<img src="image.jpg" width="340" height="254" alt="[sample picture]">
    Wenn unsere Bilder verschiedene Größen haben und wir die genaue Höhe und
    Breite jedes einzelnen nicht kennen, können wir uns von identify helfen
    lassen. Wir schreiben ein Shellskript, das die Ausgabe von "identify" liest
    und dann die Zeile ausdruckt. Die Geometrie des Bildes ist der zweite
    Parameter in der Ausgabezeichenkette des Identifyprogramms. Um diesen
    Parameter zu bekommen, benutzen wir den Befehl awk: 
identify  image.jpg | awk '{print $2}'
results in
340x254
    Jetzt müssen wir die Geometrie in die Breite und Höhe aufsplitten. Dies kann
    mit: 
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $1}'
    gemacht werden, wodurch man die Breite erhält. Die Höhe bekommt man durch: 
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $2}'
    Konzentriere dich nicht zu sehr auf die genauen Shellbefehle. Wenn du sie
    jetzt noch nicht vollständig verstehst, nimm sie als gegeben hin. In der
    nächsten Ausgabe von LinuxFocus wird es einen Artikel über Shell
    Programmierung geben, in dem wir ihre ganze Magie erklären. Das komplette
    Shellskript sieht wie folgt aus: 
file=$1
geometry=`identify $file | awk '{print $2}'`
# geometry can be 563x144+0+0 or 75x98
# we need to get rid of the plus (+) and the x characters:
width=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $1}'`
height=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $2}'`
echo "<img src=\"$file\" width=\"$width\" height=\"$height\">"
    Um das vollständige Shellskript zu bekommen, fügen wir wieder einen
    Hilfstext und eine Fehlerüberprüfung hinzu. Hier ist unser fertiges
    Shellskript, imgsrcline :
    
    imgsrcline
    (html zum Anschauen), imgsrcline (Text zum
    Herunterladen) 
     
    
     
    Während ich mit ImageMagick herumgespielt habe, habe ich manchmal
    Diskrepanzen zwischen der Dokumentation und der tatsächlichen Funktionalität
    bemerkt. Einige Features sind auch nicht sehr stabil. Wenn du dich jedoch an
    die hier vorgestellten Dinge hälst, wirst du sehen, das es sehr nützlich
    ist. Die oben aufgeführten Beispiele funktionieren. Ich habe 
    ImageMagick-4.2.9 , ImageMagick-5.2.9 und ImageMagick-5.3.0 benutzt und die
    Dinge, die du hier gelernt hast, haben in all diesen Versionen funktioniert.
    
Ich hoffe, du hast einen Eindruck bekommen, was man mit ImageMagick
    machen kann und wirst die Skripte benutzen oder sogar anfangen, eigene
    Zaubersprüche zu erfinden. 
    Viel Spaß!
    Referenzen
    
      - Installation: Wahrscheinlich ist Image Magick schon auf deinem System
      installiert, da es nomalerweise in den gängigen  Linuxdistributionen mit
      dabei ist. Aber für den Fall, daß es nicht installiert ist oder du eine
      neuere Version haben möchtest, kannst du es von:
       http://www.imagemagick.org/
       herunterladen
- Für weitere Informationen über die Werkzeuge von Image Magick kannst
      du die man pages befragen (z.B. tippe man convert, um mehr über convert
      herauszufidnen) oder denselben Text auf ihrer Webseite lesen. 
- Wenn du noch nicht mit Shell Programmierung vertraut bist, laß google
      einfach nach bash suchen und du solltest einige Tutorialen finden, die für
      dich geeignet sind. Oder du kannst bis zur nächsten Ausgabe von LinuxFocus
      warten und dort einen Artikel über Shell Programmierung lesen.