Drehen nach Exif-Lagesensor

Mecki14

Mitglied
Registriert
15.03.06
Beiträge
2.831
Ort
Düsseldorf
Trophäen
einige {*} {!} * !
Ich drehe per Skript Bilder.

Code:
Lage = FF_GetExifTag("Orientation")
if Lage <> "" then
	select case Lage
		case 6
			FF_RotateFile Bild ,90
		case 8
			FF_RotateFile Bild ,270
	case else
	end select
end if
Das funktioniert auch einwandfrei. Nur das Exif-Vorschaubild wird nicht mit gedreht. Natürlich kann ich die betroffenen Bilder händisch markieren und die Exif-Vorschau restaurieren; aber wie geht das per Skript?

Ich arbeite mit FF_Version 3.00 Build 24
 
AW: Drehen nach Exif-Lagesensor

Auf jeden Fall solltest das Exif-Flag nach dem drehen auf 0 setzen.

Und mit: Bild laden, drehen, Exif-Flag löschen, speichern, klappt's auch mit der Vorschau.
 
AW: Drehen nach Exif-Lagesensor

Danke Heinz,
nächste Woche werde ich es testen. Ich bereite mich gerade auf eine Autotour vor und habe daher die nächsten Tage keine Zeit dazu.
 
AW: Drehen nach Exif-Lagesensor

Hallo Harald,

falls das nicht nur ein Ausschnitt ist, musst Du zuerst die Exif mit FF_LoadExif aus der Datei laden, sonst hast Du die falschen.
Bin mir nicht sicher, aber glaube zu wissen, dass FF bei jedem Vorgang für Orientation = 1 neu schreibt. Falls das bei Skriptfunktionen nicht so ist, musst Du das explizit setzen. Ich habe es so zumindest getan.
Das Schreiben des Vorschaubildes musst Du aber erst anstoßen:
FF_RestoreExifThumb(VT_BSTR filename) Erzeugt ein neues Vorschaubild in den Exifdaten.
 
AW: Drehen nach Exif-Lagesensor

Das ist alles sehr seltsam.
Bei folgendem Code
Code:
for n = 0 to FF_GetImageCount -1

	Bild = FF_GetImageName(n)
	FF_LoadImage Bild
	Lage = FF_GetExifTag("Orientation")

	if Lage <> "" and Lage <> 1 then
		select case Lage
			case 6
				FF_RotateFile Bild ,90
			case 8
				FF_RotateFile Bild ,270
		case else
		end select
	end if

next

funktioniert alles einwandfrei. Wenn man anschließend nochmal bei den gedrehten Bilder den Wert des Exif-Lagesensors prüft, hat FF ihm den Wert 1 zugewiesen.
Ich wende den Code allerdings in einer übergeordneten Schleife an in der auch Exif- und IPCT-Daten eingetragen werden. Dann wird auch gedreht, aber das Vorschaubild nicht. Alle Ratschläge habe ich getestet, sowohl die von Heinz als auch die von Werner. Der Befehl FF_RestoreExifThumb(VT_BSTR filename) ist übrigens nicht in der Bedienungsanleitung zu finden, wird aber klaglos akzeptiert. Leider alles ohne Erfolg.
Das Problem muss irgendwo in den Tiefen meiner großen Schleife zu finden sein. Ich werde suchen.
 
AW: Drehen nach Exif-Lagesensor

Hallo Mecki,

Du bringst Da ein paar Dinge durcheinander. Einmal lädst Du das Bild in den Speicher, dann drehst Du das Bild verlustlos auf der Festplatte, das Schreiben etc. fehlt.

Benutze folgende Befehle in dieser Reihenfolge, sonst geht's schief:
  • FF_LoadExif(FileName) 'Exif aus Datei laden
  • FF_HasExif() 'Abfragen, ob Bild überhaupt Exifs hat
  • FF_GetExifTag("Orientation") 'Ergebnis in Variable überführen
  • FF_SetExifTag("Orientation", "1")
  • Sonstige Exif-Operationen
  • FF_SaveExif(FileName)
  • FF_RotateFile(FileName, Grad) ' Variable nur auf 6 und 8 abfragen. Den Else-Zweig kannst Du Dir hier schenken. FF liefert hier String zurück, also abfragen nach "6" und "8".
  • FF_RestoreExifThumb (FileName)
 
Zurück
Oben