Digitale Bildverarbeitung

erstellt: 31 Oct 2013 - letzte Änderung: 17 Oct 2014

Bildverarbeitung für Digitalfotos.

Die Digitale Bildverarbeitung erfolgt in mehreren Schritten.

Bilder von der Didgitalkamera einlesen

Einlesen geht recht komfortabel auf der Kommandozeile mit gphoto2.

Bilder auf der Kamera auflisten

gphoto2 --auto-detect -L

Alle Bilder einlesen

gphoto2 --auto-detect --filename %04n.%C --get-all-files

oder nur bestimmte Bereiche (nach laufender Nummer)

gphoto2 --auto-detect --filename %04n.%C --get-file "23-1337"

Hierbei werden die Bilder mit der laufenden Nummer 23 bis 1337 eingelesen und im aktuellen Verzeichnis mit laufender Nummer:

0023.JPG
...
1337.JPG

Dateinamen / Metadaten optimieren

Bilder anhand des Aufnahmedatums (EXIF) umbenennen

# JPG Dateien
exiftool -P '-DateTimeOriginal>Filename' -d %Y%m%d-%H%M%S-%%0.4C.jpg *.[jJ][pP][gG]
# Canon Raw Dateien
exiftool -P '-DateTimeOriginal>Filename' -d %Y%m%d-%H%M%S-%%0.4C.cr2 *.[cC][rR]2
# oder alles auf einmal (Dateiendung wird beibehalten - also z.B. .JPG statt .jpg!)
exiftool -P '-DateTimeOriginal>Filename' -d %Y%m%d-%H%M%S-%%0.4C.%%e *

Ergebnis:

20131025-161850-0000.cr2
20131025-161850-0000.jpg
...

MTime der Bilder anhand des Aufnahmedatums (EXIF) setzen

exiftool '-DateTimeOriginal>FileModifyDate' *

Datum / Uhrzeit verschieben

Falls die Uhr der Kamera verstellt war können die EXIF Aufnahmedaten (DateTimeOriginal, CreateDate und ModifyDate) auch um eine Zeitspanne verschoben werden: # Zeit in HH:MM:SS abziehen DIFFTIME=“00:51:41” exiftool -AllDates-=$DIFFTIME * # oder drauf rechnen exiftool -AllDates+=$DIFFTIME *

N.B. Bilder können auch wieder auf die SD-Card der (Canon) Kamera geladen werden

Dazu erstmal entsprechende Namen vergeben:

# JPEG
COUNTER=1; for file in *.[jJ][pP][gG]; do NAME=$(printf "IMG_%0.4i.JPG\n" $COUNTER); mv $file $NAME; let COUNTER=$COUNTER+1; done
# Raw / CR2
COUNTER=1; for file in *.[cC][rR]2; do NAME=$(printf "IMG_%0.4i.CR2\n" $COUNTER); mv $file $NAME; let COUNTER=$COUNTER+1; done

Und eventuell gedrehte Bilder wieder zurücksetzen:

for file in *.jpg; do width=$(exiftool $file | egrep "^Image Width" | awk '{print $4}'); height=$(exiftool $file | egrep "^Image Height" | awk '{print $4}'); echo "-----"; echo "Width: $width -- Height: $height"; if [ $width -le $height ]; then echo "Rotate..."; jpegexiforient -6 ${file}; jhead -autorot ${file}; jpegexiforient -8 ${file}; fi; done

Anschliessend diese Dateien (IMG_0001.JPG, IMG_0002.JPG, … IMG_0947.JPG) auf die SD-Card nach DCIM/100CANON/ (oder 101TEST1 oder 102BLABL …) kopieren. Der Ordner muss lediglich mit drei Ziffern beginnen und anschließend mit fünf Buchstaben (Groß) enden.

Bilder bearbeiten (Konsole / Batch)

Automatisch rotieren

Falls man an irgendeiner Stelle Software einsetzt die die Bilder nicht automatisch anhand der Metadaten dreht kann man sie (verlustlos) rotieren lassen.

jhead -autorot *.jpg
# oder
exifautotran *.jpg
# oder
exiftran -aip *.jpg

JPEG Bildergröße optimieren (lossless)

Mit “jpegoptim” können die Huffman tables verlustfrei optimiert werden was zu klieneren JPEG Dateien führen kann. jpegoptim -p -t *.jpg

Für eine Diashow in 1920x1080 bereitstellen

DIR="/Pfad/zur/den/Bildern"; for longfile in $(find $DIR -name "*.jpg"); do file=$(basename $longfile); echo "working on $file..."; cp -a ${DIR}/${file} ${file}; jhead -autorot ${file}; convert ${file} -background black -gravity center -resize 1920x1080 -extent 1920x1080 ${file}_tmp.jpg; mv ${file}_tmp.jpg ${file}; done

Bilder auf bestimmte Größe stutzen (z.B. 800 Pixel breite):

convert -resize 800x original.jpg neuesbild.jpg

Exifdaten eines Bildes löschen:

exiftool -all= neuesbild.jpg

GUI-Tools

Bildbetrachter

Mit einem Bildbetrachter kann schnell ein Überblick über die Bilder gewonnen werden.

Geeqie ist ein recht schlanker Bildbetrachter ohne Datenbankfunktion mit dem auf die Ordnerstruktur zugegriffen werden kann.

gThumb stammt aus den Gnome Projekt und bietet ebenfalls Zugriff über die Ordnerstruktur.

Raw Converter