Springe zum Hauptinhalt

Skriptgesteuerte Bildberarbeitung

Skriptgesteuerte Bildverarbeitung


Kursinhalt:

Stand: Januar 2007


Motivation

  • mehrere (viele) Bilder im Stapel bearbeiten
  • häufig wiederkehrende Prozesse automatisieren
  • Verarbeitung in Skripten
  • Kommandozeile ist schneller smile

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

  • Exchangeable Image File Format
  • Ablage für Informationen von Digitalkameras

$ 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

  • Digitalkameras mit eingebauten Orientierungssensor setzten den EXIF-Tag Orientation. Damit lassen sich Bilder automatisch je nach Kameralage rotieren.
  • jhead nutzt zum rotieren das Werkzeug jpegtran, welches verlustfreie jpeg-Transformationen unterstützt und korrigiert den Orientation -Tag
  • die Option -ft setzt Timestamp des Bildes auf das Aufnahmedatum aus dem EXIF-Informationen

$ 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 kann auch formatierte Ausgabe für Skripte erzeugen
  • Formatierungszeichen: siehe Manual man ImageMagick?

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


Bildmanipulation

Vorschaubilder (thumbnails)

  • Digitalkamera-Bilder sind meist "zu groß" für Bildübersichten bzw. Webseiten
  • kleine Vorschaubilder erzeugt z.B. das Werkzeug convert
  • convert erhält automatisch das Seitenverhältnis. D.h. die Vorschaubilder im Beispiel werden maximal 80x40 Pixel.
  • statt der Pixelgeometrie kann auch ein Verhältnis zum Original angegeben werden

$ 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

  • EXIF-Daten können auch Thumbnails enthalten

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

Drehen

  • als Portrait aufgenommene Bilder
  • convert dreht Bilder auf Pixelebene, d.h. es erfolgt eine Re-Kodierung des Inhalts

$ convert -rotate 90 infile.jpg rot_outfile.jpg

IMG_0516.JPG rotiert rot_IMG_0516.JPG

  • jpegtran arbeit nur mit jpeg-Format, dafür aber verlustfrei und deutlich schneller ¹)

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

¹) im Vergleich zu convert mit jpeg-Bildformat

Texte

  • Bildbeschreibungen, Aufnahmedatum, Copyright

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

  • Fontnamen werden über das Fontsystem des aktuellen X11-Displays aufgelöst. Verfügbare Fonts: xlsfonts
  • Fonts können auch über Fontfiles spezifiziert werden. (bei Server-Skripten unbedingt erforderlich!)

$ 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

  • negative Farbdarstellung, vergleichbar mit fotografischen Filmnegativen

$ convert  -solarize 1 infile.jpg outfile.jpg

Unscharf

  • Anordnung der Bildpunkte mit zufälliger Abweichung

$ convert  -spread 20 infile.jpg outfile.jpg

charcoal_IMG_0516.JPG   solarize_IMG_0516.JPG   spread_IMG_0516.JPG

Rahmen

  • verzieren von Bilder, z.B. für eine Webgallery
  • Darstellung von Schaltflächen

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.

  • zunächst benötigt man eine "Vorlage" für eine abgerundete Ecke, das ist ein kleines, quadratisches Bild mit einer transparenten Rundung
  • der Rest wird mit der gewünschten Hintergrundfarbe gefüllt, GIMP kann uns dabei helfen

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 kann mehrseitige PDF-Dokumenten in einzelne Bitmapgrafiken zerlegen.
  • Auflösung kann über den Paramter density festgelegt werden, Standard 72dpi

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

  • pdfimages aus dem xpdf-Paket extrahiert eingebettete Bilder aus PDF-Dokumenten

$ 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

  • xc:<color> eingebautes Bildformat, erzeugt ein Bild mit übergebener Farbe
  • -size <Breite>x<Höhe> legt die Bildgröße fest (nachträgliches -scale möglich)
  • -fill <color> definiert die Füllfarbe für nachfolgende Elemente
  • -stroke <color> definiert die Umrandung für nachfolgende Elemente

$ 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

  • xc:transparent erzeugt ein transparentes Bild (Alphakanal)

$ 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

  • +antialias deaktiviert Antialiasing
  • -transparent <color> konvertiert die übergebene Farbe in Transparenz

$ 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

  • -matte fügt dem Bild einen Alphakanal hinzu
  • -compose <methode> definiert die Methode der Überlagerung

$ 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

  • Logo

    #wirsinddivers

    TU Chemnitz lädt am 20. Mai 2025 alle Interessierten aus der Universität und der Stadt Chemnitz zum 3. Diversity Day ein …

  • Mehrere junge Menschen stehen um einen Tisch herum, auf dem Miniroboter fahren.

    RoboDay 2025: Robotik-Talente zeigen ihr Können

    Am 17. Mai 2025 wird der regionale Vorausscheid zur „World Robot Olympiad“ und der Wettbewerb „RoboSAX“ vereint mit einem Begleitprogramm für Kinder und Jugendliche, die spielerisch den Umgang mit Robotertechnologie, KI und autonomem Fahren erleben und die TU Chemnitz kennenlernen können …

  • Ein Mann mit Helm steht vor einem Förderturm im Sonnenuntergang.

    „Rummelplatz“ – eine ganz besondere Zeitreise

    TU Chemnitz ist Kooperationspartnerin der Konferenz zur Uraufführung der Oper „Rummelplatz“ ­– Für den Science Slam „Von Atommacht bis Zonen-Pop“ können bis zum 6. Juni 2025 Kurzbewerbungen eingereicht werden …

  • Ein Mann und eine Frau stehen neben einer technischen Anlage.

    Vom Reststoff zur Ressource

    Projekt „Reformed Wool“ bringt textile Abfälle zurück in den Kreislauf – EXIST-Förderung für Gründungsteam an der TU Chemnitz …