Studieren in Chemnitz. Wissen, was gut ist.







Skriptgesteuerte Bildverarbeitung


Kursinhalt:

Stand: Januar 2007


Motivation

Behandelte Werkzeuge sind größtenteils Bestandteil des ImageMagick -Paketes.


Bildformate

Überblick

Der Kurs beschäftigt sich ausschließlich mit Rastergrafiken (auch als Pixelgrafik bzw. Bitmaps bezeichnet).

Beachte: Operationen an Rastergrafiken sind i.A. nicht umkehrbar!

Formate (Auswahl)

Format Name Anmerkung
jpg/jpeg Joint Photographics Expert Group einstellbare,verlustbehaftete Kompression
png Portable Network Graphics indiziert, Graustufen, Echtfarben
transparent, verlustfreie Kompression
gif Graphics Interchange Format indizierte Farben 8bit
transparent
animiert
tif/tiff Tagged Image File Format verschiedene Versione von tiff
mehrere Ebenen möglich
xwd X Windows Dump Snapshot von xwd -Tool

  • Natürliche Bilder lassen sich gut im JPEG-Format speichern.
  • Für Bilder mit scharfen Kontrastübergängen wie techn. Zeichnungen ist PNG besser geeignet.
  • Die Kompressionsalgorithmen von JPG und PNG enthalten eine Lauflängenkompression.
    Einen zusätzlich Kompression (z.B. ZIP) zeigt keine Wirkung.

Konvertieren von Bildformaten

Das Werkzeug convert unterstützt die Konvertierung von/in verschiedene Bildformate. Diese werden automatisch erkannt. Die Steuerung des Ausgabeformates kann anhand der Dateierweiterung festgelegt werden.

$ convert infile.jpg outfile.png

$ cat infile.jpg | convert - jpg:outfile

Von ImageMagick unterstützte Formate sind im Manual gelistet. man ImageMagick?


Bildinformationen

EXIF-Daten auswerten

$ jhead IMG_2836.JPG
File name    : IMG_2836.JPG
File size    : 752732 bytes
File date    : 2007:01:24 11:27:26
Camera make  : Canon
Camera model : Canon PowerShot S45
Date/Time    : 2005:02:20 18:07:56
Resolution   : 2272 x 1704
Flash used   : Yes
Focal length : 17.5mm  (35mm equivalent: 89mm)
CCD width    : 7.11mm
Exposure time: 0.017 s  (1/60)
Aperture     : f/4.5
Metering Mode: matrix
Jpeg process : Baseline

$ jhead  -autorot -ft bild.jpg
Cmd:jpegtran -rotate 90 -outfile "bild.JPt" bild.jpg
Modified: bild.jpg

identify -Werkzeuge

Identifizieren von Bilder, z.B. zur Bestimmung der Dimensionen wird durch das Werkzeug identify unterstützt. Das funktioniert für alle von ImageMagick unterstützten Formate. (ohne EXIF-Informationen)

$ identify -verbose outfile.jpg
Image: outfile.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Geometry: 600x420
  Class: DirectClass
  Colorspace: RGB
  Type: TrueColor
  Depth: 8 bits
  ...

$ identify -format "%wx%h" outfile.jpg
600x420


Bildmanipulation

Vorschaubilder (thumbnails)

$ convert -sample 80x40 infile.jpg outfile.jpg

IMG_0652.JPG und hier das Vorschaubild thumb_IMG_0652.JPG

$ convert -sample 12%x12% infile.jpg outfile.jpg

$ jhead -st thumb_bild.jpg bild.jpg
Created: 'thumb_bild.jpg'

Drehen

$ convert -rotate 90 infile.jpg rot_outfile.jpg

IMG_0516.JPG rotiert rot_IMG_0516.JPG

$ jpegtran -rotate 90 infile.jpg > rot_outfile.jpg

¹) im Vergleich zu convert mit jpeg-Bildformat

Texte

$ convert -fill "white" -font "helvetica" -pointsize "54" \
          -draw 'text 20,74 "Ein Bild von ..."' infile.jpg text_outfile.jpg

$ INFO=$(identify -format "Dateiname: %f\nDateigröße: %b\nHöhe: %h\nBreite: %w" infile.jpg)
$ convert -fill "#343434" -font "$HOME/PRIVAT/fonts/waltograph42.otf" -pointsize "20" \
          -draw "text 10,26 \"$INFO\"" infile.jpg text_outfile.jpg

text_IMG_0652.JPG

Effekte

Das ImageMagick-Werkzeug convert ist in der Lage, künstlerische Effekte wie von GIMP-Plugins bekannt, in Kommandozeilenform umzusetzen.

Kohlezeichnung

$ convert -charcoal 3 infile.jpg outfile.jpg

Solarisation

$ convert  -solarize 1 infile.jpg outfile.jpg

Unscharf

$ convert  -spread 20 infile.jpg outfile.jpg

charcoal_IMG_0516.JPG   solarize_IMG_0516.JPG   spread_IMG_0516.JPG

Rahmen

erhabene Rahmen

$ convert  -raise 20x20 infile.jpg outfile.jpg

Probier mal die Option +raise 20x20

farbige Rahmen

$ convert -bordercolor "BlueViolet" -border 20x20 infile.jpg outfile.jpg

Verfügbare Farbnamen zeigt das Kommando: convert -list color

$ convert -mattecolor "grey21" -frame 50x50+15+15 infile.jpg outfile.jpg

raise_IMG_0516.JPG   border_IMG_0516.JPG   frame_IMG_0516.JPG

abgerundete Ecken

Es gibt keine Funktion "abgerundete Ecken". Aber durch Überlagerung sollte auch das gelingen.

preview_ecke_ro.png

$ composite -gravity NorthEast ecke_ro.png infile.jpg outfile.jpg

roundet_IMG_0516_1.JPG

Die restlichen Ecken müssen analog hergestellt werden (z.B. durch Drehen der Vorlage).


Einsatz von Skripts

ImageMagick? mit mehreren Operationen

Die ImageMagick-Werkzeuge können mehrere Operationen in einem Prozess ausführen. Die Reihenfolge der Optionen bestimmt die Verarbeitungsfolge.

$ convert -sample 25%x25% -charcoal 2 -spread 4 infile.jpg outfile.jpg

Bearbeiten mehrerer Bilder

Dabei hilft uns die Shell:

for i in *.JPG *.jpg *.png
do
  echo "Bearbeite $i ..."
  convert -sample 25%x25% "$i" "thumb_$i"
done

... oder rekursiv in Unterverzeichnissen:

find . -type f -name "*.jpg" | while read i
do
  echo "Bearbeite $i ..."
  convert -sample 25%x25% "$i" "$(dirname $i)/thumb_$(basename $i)"
done


Tipps

Bilder aus PDF-Dokumenten extrahieren

$ convert -density 300 infile.pdf pages-%04d.png

$ pdfimages infile.pdf bild

Bildergallerien im Web

Werkzeuge zum Erstellen von Bildergallerien für das Web gibt es viele. An dieser Stelle wird ein Skript vorgestellt, welches die im Kurs behandelten ImageMagick-Werkzeuge nutzt.

Bilder skriptgesteuert erstellen

einfache geometrische Formen

$ convert -size 300x400 xc:white \
              -fill black -draw "line   30,30 270,70" \
              -fill blue -draw "rectangle 30,100 130,250" \
              -fill yellow -stroke black -draw "circle 220,130 220,170" \
              -fill DarkOrange -draw "roundrectangle 180,200 270,250 30,10" \
              -fill LightCyan2 -stroke none -draw "rectangle 50,280 250,370" \
              -fill gray -stroke black -draw "arc 50,280 250,370 45,270 " \
              -fill black -draw "text 255,325 '0°' text 150,385 '90°'" simple_geo.png

simple_geo.png

Buttons für's Web

$ convert -size 300x85 xc:transparent \
              -mattecolor "DeepSkyBlue" -frame 5x5+2+2 \
              -fill DeepSkyBlue -stroke black -font /usr/share/fonts/ooffice/free_msfonts/comicbd.ttf \
                 -pointsize 40 -gravity center -draw "text 0,0 'Image Magick'" simple_text.png

simple_text.png

Vorlage für eine abgerundete Ecke

$ convert -size 12x12 xc:white \
              +antialias -fill black -draw "circle 0,12 12,12" -transparent black ecke_ro.png
$ convert -rotate 90 ecke_ro.png ecke_ru.png

$ convert -size 12x12 xc:white \
              \( -size 12x12 xc:none -fill black -draw "circle 0,12 12,12" \) \
              -matte -compose Dst_Out  ecke_ro.png


Links