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.
Links und weitere Informationen
- EXIF Spezifikationen: http://www.exif.org/specifications.html
- Projektseite von
jhead
: http://www.sentex.net/~mwandel/jhead/