Einführung

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 besitzt 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.

Natürlich kann man dazu 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.