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
=> 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.
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
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
5. Jetzt erstellt man ein Verzeichnis auf der Festplatte, in das man die
bei einem 32Bit-Windows und
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
Den folgenden Batchscript-Code muss man in einer Textdatei mit dem Namen
7. Jetzt navigiert man zum Verzeichnis
und lädt die dort befindliche Konfigurationsdatei von IrfanView
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.
und endet vor der Kopfzeile des nächsten Abschnitts.
8. Als erstes muss sichergestellt sein, dass im Abschnitt
9. Als nächstes muss überprüft werden, ob im Abschnitt
10. Zu guter Letzt müssen im Abschnitt
Bei einem 64Bit-Windows muss
11. Jetzt muss die Datei
Viel Spass damit!
Gruß
Friemler
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.
Schritt 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, etwaC:\Program Files\IrfanView\Plugins\SetExifOrientation
C:\Program Files (x86)\IrfanView\Plugins\SetExifOrientation
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
i_view32.ini
in einen Texteditor. Es handelt sich hierbei um eine Datei im sog. INI-Dateiformat, die durch Zeilen wie[JPEG]
ExifRotate=1
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""
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
Please also mark the comments that contributed to the solution of the article
Content-ID: 251916
Url: https://administrator.de/contentid/251916
Printed on: December 4, 2024 at 02:12 o'clock
1 Comment