Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

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

Anleitung Multimedia Grafik

Mitglied: Friemler

Friemler (Level 2) - Jetzt verbinden

14.10.2014, aktualisiert 27.10.2014, 6432 Aufrufe, 1 Kommentar, 2 Danke

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.

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, 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
01.
Option Explicit 
02.
 
03.
 
04.
Const ExifToolFileName      = "exiftool.exe" 
05.
Const IrfanViewReloadScript = "IrfanViewReloadImage.cmd" 
06.
 
07.
Dim objFSO, objShell 
08.
Dim strOrientation, intOrientation, strImageFile, strWindowTitle 
09.
Dim strOwnPath, strExifToolPath, strScriptPath, strCommand 
10.
 
11.
If WScript.Arguments.Count > 1 Then 
12.
  Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject") 
13.
  Set objShell    = WScript.CreateObject("WScript.Shell") 
14.
 
15.
  strOrientation  = WScript.Arguments(0) 
16.
  strImageFile    = WScript.Arguments(1) 
17.
  strOwnPath      = objFSO.GetParentFolderName(WScript.ScriptFullName) 
18.
  strExifToolPath = objFSO.BuildPath(strOwnPath, ExifToolFileName) 
19.
  strExifToolPath = """" & strExifToolPath & """" 
20.
  strWindowTitle  = strImageFile 
21.
 
22.
  Select Case UCase(strOrientation) 
23.
    Case "ROTATE90CW":  intOrientation = 6 
24.
    Case "ROTATE270CW": intOrientation = 8 
25.
    Case "NORMAL":      intOrientation = 1 
26.
    Case Else           WScript.Quit 
27.
  End Select 
28.
   
29.
  strCommand = strExifToolPath & " -P -Exif:Orientation#=" & intOrientation & " """ & strImageFile & """" 
30.
   
31.
  If objShell.Run(strCommand, 0, True) = 0 Then 
32.
    strCommand = strExifToolPath & " -delete_original! """ & strImageFile & """" 
33.
    objShell.Run strCommand, 0, False 
34.
 
35.
    strScriptPath = objFSO.BuildPath(strOwnPath, IrfanViewReloadScript) 
36.
    strCommand = "cmd.exe /c """"" & strScriptPath & """ """ & strWindowTitle & """""" 
37.
    objShell.Run strCommand, 0, False 
38.
  Else 
39.
    strCommand = strExifToolPath & " -restore_original """ & strImageFile & """" 
40.
    objShell.Run strCommand, 0, False 
41.
  End If 
42.
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.
01.
:: ********************************************************** 
02.
:: Dieses Script schickt an das Fenster, dessen Titelzeile 
03.
:: den im Parameter %1 übergebenen String enthält, Messages  
04.
:: vom Typ WM_KEYDOWN und WM_KEYUP mit den Scancodes für die 
05.
:: Tastenkombination SHIFT+R. 
06.
:: Wenn das gefundene Fenster zu IrfanView gehört, wird das 
07.
:: gerade angezeigte Bild erneut von der Festplatte geladen. 
08.
:: ********************************************************** 
09.
 
10.
@echo off & setlocal 
11.
 
12.
cd /d "%~dp0" 
13.
 
14.
if "%~1" neq "" if exist "%~1" ( 
15.
  nircmdc win postmsg ititle "%~1" 0x0100 0x0010 0x002A0001 
16.
  nircmdc win postmsg ititle "%~1" 0x0100 0x0052 0x00130001 
17.
  nircmdc win postmsg ititle "%~1" 0x0101 0x0052 0xC0130001 
18.
  nircmdc win postmsg ititle "%~1" 0x0101 0x0010 0xC02A0001 
19.
)
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:
01.
ExternalViewer4=C:\Program Files\IrfanView\Plugins\SetExifOrientation\SetExifOrientation.vbs ""Rotate90CW" "%1"" 
02.
ExternalViewer5=C:\Program Files\IrfanView\Plugins\SetExifOrientation\SetExifOrientation.vbs ""Rotate270CW" "%1"" 
03.
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
Mitglied: colinardo
15.10.2014, aktualisiert um 09:11 Uhr
@Friemler: Mal wieder eine sehr schöne Anleitung

Weiter so!

Viele Grüße
Uwe
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Cloud-Dienste
Amazon: Dieser Lkw transportiert Daten in die Cloud (1)

Link von Kraemer zum Thema Cloud-Dienste ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Backup
gelöst Datensicherung von Daten, auf denen die ganze Zeit gearbeitet wird (8)

Frage von Windows11 zum Thema Backup ...

Grafik
Notebook zum Fotos bearbeiten (10)

Frage von KodaCH zum Thema Grafik ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...