friemler
Goto Top

Bildorientierung in den Exif-Daten von Fotos beim Betrachten mit IrfanView dauerhaft korrigieren

Vielleicht kennt Ihr das Problem: Aus irgendeinem Grund hat Eure Kamera bei einer Hochkantaufnahme nicht erkannt, dass sie um 90° gedreht gehalten wurde und deshalb die entsprechende Information (den sog. Exif:Orientation-Tag) in der Bilddatei falsch gesetzt, wodurch später der Bildbetrachter am PC das Foto im normalen Querformat anzeigt. Statt sich beim Ansehen den Hals zu verrenken oder das Bild nur temporär per Rotate-Funktion zu drehen, wäre es doch eine feine Sache, die notwendige Information per Tastendruck dauerhaft in der Datei zu speichern und die geänderte Bilddatei danach neu zu laden.

Programme zu finden, mit denen sich der Exif:Orientation-Tag ändern lässt, ist zwar kein Problem, aber es ist doch etwas umständlich und störend, während einer Fotovorführung oder auch bei der vorbereitenden Sichtung der Bilder zwischen zwei Programmen zu wechseln. Es muss also eine Lösung her, mit der sich das ganze "so nebenbei" aus dem Bildbetrachter heraus erledigen lässt.

Mein Lieblings-Bildbetrachter ist schon seit Jahren IrfanView von Irfan Skiljan. Das Programm bietet die Möglichkeit, das gerade geladene Bild per Tastenkombination in einem anderen Programm zu öffnen.
=> Es existiert eine einfach anzusprechende Schnittstelle, um ein externes Hilfsprogramm aufzurufen.

Natürlich soll das Schreiben der Exif-Daten automatisch und unsichtbar erfolgen, man will ja nicht irgendein aufpoppendes Programm wieder manuell schließen müssen. Das lässt sich am einfachsten mit Konsolenprogrammen erreichen. Außerdem ist DAS Tool zum Schreiben und Lesen der Metadaten von sehr vielen Dateiformaten sowieso ein Konsolenprogramm.
=> ExifTool von Phil Harvey

Damit IrfanView die geänderte Bilddatei automatisch neu lädt, muss man etwas tiefer in die Trickkiste greifen. Man muss das Fenster suchen, in dessen Titelzeile der Dateiname des Bildes enthalten ist (das sollte das IrfanView-Fenster sein). Diesem Fenster schickt man dann die Windows-Botschaften, die es auch erhalten würde, wenn der Benutzer die Tastenkombination SHIFT+R für den Bild-Reload eingibt.
=> Beide Funktionen lassen sich zusammen in 4 Zeilen mit Hilfe des Tools NirCmd von Nir Sofer kodieren.

Grundlegende Informationen zu Exif finden sich übrigens hier.

back-to-topSchritt für Schritt

Nur um es nochmal klarzustellen: Die eigentlichen Grafikdaten werden bei der hier geschilderten Methode NICHT verändert, es kommt also nicht zu Qualitätseinbußen, wie sie gerade bei JPEG-Bildern auftreten, wenn sie "wirklich" gedreht und neu geschrieben werden. Es wird lediglich eine Steuerinformation geändert, die von Bildbetrachtern ausgewertet wird und von der Kamera in die Bilddatei eingetragen wurde - leider manchmal mit dem falschen Wert.

1. Zuerst muss man sich natürlich über die obigen Links die benötigten Programme herunterladen, die alle kostenlos sind. Wer IrfanView schon installiert hat, muss auf die Version 4.38 oder höher updaten und kann dann bei 3. weiterlesen.

2. Der Nutzen von IrfanView wird beträchtlich erhöht, wenn man die dafür erhältlichen Plugins installiert. Dadurch lassen sich viel mehr Bildformate öffnen und das Programm wird um einige Funktionen erweitert. Die Plugins sind auch über die oben verlinkte Seite von IrfanView zu beziehen. Am einfachsten ist die Installation, wenn man auf der Downloadseite das Setup-Programm auswählt. Wer alternativ die Verwendung der 4 separaten ZIP-Dateien bevorzugt, muss den entpackten Inhalt selbst an die richtige Stelle kopieren. Hilfe dazu findet man in ReadMe-Dateien, die in den ZIP-Archiven enthalten sind.

3. Das Programm ExifTool kann nur in Form eines ZIP-Archivs heruntergeladen und muss nicht installiert werden. Es ist darauf zu achten, dass man die Windows-Version des Tools für den Download auswählt. Nach dem Entpacken des Archivs muss die extrahierte Datei exiftool(-k).exe in exiftool.exe umbenannt werden.

4. Auch NirCmd kann nur als ZIP-Datei heruntergeladen und muss ebenfalls nicht installiert werden. Es ist eine 32Bit- und eine 64Bit-Version erhältlich. Die Downloadlinks finden sich auf der oben verlinken Seite ganz am Ende des Textes. Das Archiv enthält eine Hilfe-Datei und zwei Versionen von NirCmd. Für unsere Zwecke wird nur die Datei nircmdc.exe benötigt.

5. Jetzt erstellt man ein Verzeichnis auf der Festplatte, in das man die exiftool.exe und die nircmdc.exe kopiert oder verschiebt. Das könnte man z.B. unterhalb des Installationsverzeichnissis von IrfanView tun, etwa
C:\Program Files\IrfanView\Plugins\SetExifOrientation
bei einem 32Bit-Windows und
C:\Program Files (x86)\IrfanView\Plugins\SetExifOrientation
bei einem 64Bit-Windows. An diesem Erstellungsort werden seit Vista allerdings Administratorrechte benötigt, auch für das Anlegen der in Punkt 6. genannten Scriptdateien.

6. Jetzt brauchen wir noch ein bisschen "Intelligenz" in Form von zwei Scripten, die die Fähigkeiten von IrfanView, ExifTool und NirCmd in geeigneter Weise miteinander kombinieren. Dazu legt man in dem Verzeichnis aus Punkt 5 zwei neue Dateien an, die man mit dem nachfolgenden Code füllt:

Den folgenden VBScript-Code kann man in einer Textdatei mit beliebigem Namen speichern, nur der Dateityp muss vbs sein. Mein Vorschlag: SetExifOrientation.vbs
Option Explicit


Const ExifToolFileName      = "exiftool.exe"  
Const IrfanViewReloadScript = "IrfanViewReloadImage.cmd"  

Dim objFSO, objShell
Dim strOrientation, intOrientation, strImageFile, strWindowTitle
Dim strOwnPath, strExifToolPath, strScriptPath, strCommand

If WScript.Arguments.Count > 1 Then
  Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")  
  Set objShell    = WScript.CreateObject("WScript.Shell")  

  strOrientation  = WScript.Arguments(0)
  strImageFile    = WScript.Arguments(1)
  strOwnPath      = objFSO.GetParentFolderName(WScript.ScriptFullName)
  strExifToolPath = objFSO.BuildPath(strOwnPath, ExifToolFileName)
  strExifToolPath = """" & strExifToolPath & """"  
  strWindowTitle  = strImageFile

  Select Case UCase(strOrientation)
    Case "ROTATE90CW":  intOrientation = 6  
    Case "ROTATE270CW": intOrientation = 8  
    Case "NORMAL":      intOrientation = 1  
    Case Else           WScript.Quit
  End Select
  
  strCommand = strExifToolPath & " -P -Exif:Orientation#=" & intOrientation & " """ & strImageFile & """"  
  
  If objShell.Run(strCommand, 0, True) = 0 Then
    strCommand = strExifToolPath & " -delete_original! """ & strImageFile & """"  
    objShell.Run strCommand, 0, False

    strScriptPath = objFSO.BuildPath(strOwnPath, IrfanViewReloadScript)
    strCommand = "cmd.exe /c """"" & strScriptPath & """ """ & strWindowTitle & """"""  
    objShell.Run strCommand, 0, False
  Else
    strCommand = strExifToolPath & " -restore_original """ & strImageFile & """"  
    objShell.Run strCommand, 0, False
  End If
End If

Den folgenden Batchscript-Code muss man in einer Textdatei mit dem Namen IrfanViewReloadImage.cmd speichern. Wem das nicht gefällt, der muss im obigen VBScript den Wert der Konstante in Zeile 5 nach seinen Wünschen anpassen. Der Dateityp muss auf jeden Fall cmd sein.
:: **********************************************************
:: Dieses Script schickt an das Fenster, dessen Titelzeile
:: den im Parameter %1 übergebenen String enthält, Messages 
:: vom Typ WM_KEYDOWN und WM_KEYUP mit den Scancodes für die
:: Tastenkombination SHIFT+R.
:: Wenn das gefundene Fenster zu IrfanView gehört, wird das
:: gerade angezeigte Bild erneut von der Festplatte geladen.
:: **********************************************************

@echo off & setlocal

cd /d "%~dp0"  

if "%~1" neq "" if exist "%~1" (  
  nircmdc win postmsg ititle "%~1" 0x0100 0x0010 0x002A0001  
  nircmdc win postmsg ititle "%~1" 0x0100 0x0052 0x00130001  
  nircmdc win postmsg ititle "%~1" 0x0101 0x0052 0xC0130001  
  nircmdc win postmsg ititle "%~1" 0x0101 0x0010 0xC02A0001  
)

7. Jetzt navigiert man zum Verzeichnis
C:\Users\<Benutzername>\AppData\Roaming\IrfanView
und lädt die dort befindliche Konfigurationsdatei von IrfanView i_view32.ini in einen Texteditor. Es handelt sich hierbei um eine Datei im sog. INI-Dateiformat, die durch Zeilen wie
[JPEG]
in Abschnitte unterteilt ist. Ein Abschnitt besteht aus solch einer Kopfzeile und den darauf folgenden Zeilen, die Schlüssel-Wert-Paare enthalten, wie z.B.
ExifRotate=1
und endet vor der Kopfzeile des nächsten Abschnitts.

8. Als erstes muss sichergestellt sein, dass im Abschnitt [JPEG] beim Schlüssel ExifRotate so wie oben eine 1 eingetragen ist. Durch diese Einstellung wird IrfanView dazu veranlasst, bei der Anzeige von JPEG-Bildern das Exif:Orientation-Tag zu berücksichtigen.

9. Als nächstes muss überprüft werden, ob im Abschnitt Others beim Schlüssel ShowFullPath als Wert eine 1 eingetragen ist. Diese Einstellung bewirkt, dass IrfanView den vollen Dateipfad des gerade geladenen Bildes in der Titelzeile seines Fensters anzeigt. Das ist erforderlich, damit NirCmd das Fenster finden und ihm die Botschaften senden kann, durch die das Drücken und Loslassen der Tasten SHIFT und R simuliert wird.

10. Zu guter Letzt müssen im Abschnitt Others die Schlüssel ExternalViewer (ohne Wert), ExternalViewer2 (ohne Wert) und ExternalViewer3 (der Pfad zur IrfanView-Programmdatei i_view32.exe) gesucht werden. Unter der Zeile mit dem Schlüssel ExternalViewer3 legt man nun drei neue Zeilen mit den Schlüsseln ExternalViewer4, ExternalViewer5 und ExternalViewer6 an, denen man die folgenden Werte zuweist:
ExternalViewer4=C:\Program Files\IrfanView\Plugins\SetExifOrientation\SetExifOrientation.vbs ""Rotate90CW" "%1""  
ExternalViewer5=C:\Program Files\IrfanView\Plugins\SetExifOrientation\SetExifOrientation.vbs ""Rotate270CW" "%1""  
ExternalViewer6=C:\Program Files\IrfanView\Plugins\SetExifOrientation\SetExifOrientation.vbs ""Normal" "%1""  
Bei einem 64Bit-Windows muss Program Files natürlich wieder gegen Program Files (x86) ausgetauscht werden. Die Pfade bestehen aus dem in Schritt 5. angelegten Verzeichnis und der in Schritt 6. angelegten vbs-Datei. Durch diese Einträge kann man in IrfanView mit der Tastenkombination SHIFT+4 das gerade geladene Bild um 90° im Uhrzeigersinn drehen, SHIFT+5 dreht um 90° gegen den Uhrzeigersinn und SHIFT+6 deaktiviert die automatische Drehung - das Bild wird im Querformat geladen.

11. Jetzt muss die Datei i_view32.ini nur noch gespeichert werden. Danach kann man IrfanView starten und testen ob alles funktioniert.


Viel Spass damit!


Gruß
Friemler

Content-ID: 251916

Url: https://administrator.de/contentid/251916

Printed on: December 4, 2024 at 02:12 o'clock

colinardo
colinardo Oct 15, 2014 updated at 07:11:05 (UTC)
Goto Top
@Friemler: Mal wieder eine sehr schöne Anleitung face-smile

Weiter so!

Viele Grüße
Uwe