Fotos automatisch drehen mit jhead

Viele Digitalkameras verfügen über einen Gravitationssensor, der erkennt, wie die Kamera beim erstellen des Bildes gehalten wurde. Diese Information kann man dazu nutzen, um das Bild automatisch richtig zu drehen. Die Information wird im EXIF-Tag “Orientation” des Bildes gespeichert. Mit dem Tool jhead kann man diese Information auslesen und das Foto automatisch drehen lassen.

EXIF-Daten
Wird jhead keine Option angegeben, werden einige EXIF-Informationen angezeigt:

$ jhead foto.jpg
File name    : foto.jpg
File size    : 2040209 bytes
File date    : 2011:01:16 18:22:37
Camera make  : Canon
Camera model : Canon DIGITAL IXUS 80 IS
Date/Time    : 2011:01:14 23:05:42
Resolution   : 2592 x 1944
Orientation  : rotate 90
Flash used   : Yes (auto)
Focal length :  6.2mm  (35mm equivalent: 39mm)
CCD width    : 5.72mm
Exposure time: 0.017 s  (1/60)
Aperture     : f/2.8
Focus dist.  : 0.48m
ISO equiv.   : 250
Whitebalance : Auto
Metering Mode: pattern

Das Tag “Orientation” sagt, dass das Bild um 90° gedreht wurde. Aber jetzt weiss man immer noch nicht, ob das Bild im Uhrzeigersinn, oder im Gegenuhrzeigersinn gedreht werden muss.

Noch mehr Informationen kann man jhead mit der Option -v entlocken:

$ jhead -v foto.jpg  | grep -i orientation
    Orientation = 6
Orientation  : rotate 90

Das Orientation-Tag beseitzt den Wert 6. In den Spezifikationen von den EXIF-Tags steht folgendes dazu:

The 0th row is the visual right-hand side of the image, and the 0th column is the visual top.

Daraus lässt sich schliessen, dass das Bild um 90° im Uhrzeigersinn gedreht werden muss.

Das Foto drehen
Mit der Option -autorot kann jhead das Foto automatisch drehen.

$ jhead -autorot foto.jpg
Modified: foto.jpg

Das eigentliche Rotieren übernimmt nicht jhead, sondern jpegtran.

Das Orientation-EXIF-Tag besitzt nun den Wert 1. Das Bild muss also nicht mehr gedreht werden.

$ jhead -v foto.jpg  | grep -i orient
    Orientation = 1

Orientation-Tag entfernen
Möchte man ein Foto nicht rotieren, aber das Orientation-EXIF-Tag trotzdem entfernen, kann man das mit der Option -norot machen:

$ jhead -norot anderesfoto.jpg

Alle Fotos in einem Verzeichnis drehen
Meistens will ich alle Fotos in einem Verzeichnis richtig drehen. Das kann man folgendermassen machen:

$ jhead -autorot *.[jJ][pP][gG]

Die Shell löst den regulären Ausdruck *.[jJ][pP][gG] auf, und übergibt alle passenden Dateinamen an jhead weiter.

Diesen Befehl habe ich in einem Skript, damit ich jederzeit jhead so aufrufen kann:

#!/bin/bash
################################################################
#
# imagerotate
# Dreht Fotos anhand des EXIF-Tag Orientation
#
# 2011-01-16; Emanuel Duss; Erste Version
#
################################################################

################################################################
# Main
jhead -autorot *.[jJ][pP][gG]

# EOF

Natürlich kann man auch einen Alias in der .bashrc eintragen:

alias imagerotate="jhead -autorot *.[jJ][pP][gG]"

Alle Fotos drehen
Folgendermassen kann man alle Bilder, welche sich im Ordner “~/Bilder” befinden automatisch drehen:

$ find ~/Bilder -type f -name *.[jJ][pP][gG] -exec jhead -autorot {} \;

Somit ist die gesamte Bildersammlung richtig gedreht.

Links und weitere Informationen

1 thought on “Fotos automatisch drehen mit jhead”

Leave a Comment