PDA

Vollständige Version anzeigen : Exif Datum erzeugen


Azure
01.11.06, 20:07:35
Hallo erstmal zusammen :)

Bin durch Google auf das Programm hier gestossen - es ist so ziemlich meine letzte Hoffnung:

Ich habe lange Zeit meine Fotos nur mit dem WinExplorer und einer Ordnereinteilung verwaltet und fange jetzt an auf ein "richtiges" Bildverwaltungsprogramm umzusteigen.

Mein Problem ist jetzt, dass bei vielen meiner Bilder kein bzw nicht das richtige Datum in den EXIF-Daten steht.
Da ich aber alle Dateien nach einer entsprechenden Maske mit den Daten versehen habe, suchte ich jetzt eine Möglichkeit diese Infos automatisch in die EXIFs einzutragen....

Aber bisher tragen alle Programme immer nur das gleiche bei jedem Bild ein :-/

Bin auch insgesamt noch rel "neu" in dem Bereich, wenn ihr hierzu irgendeine Lösung wisst?

bonsai
01.11.06, 21:52:53
Ich habe ein ähnliches Problem, nämlich einen Haufen Bilder ohne EXIF-Informationen.
Allerdings entspricht das Datei-Datum und die Zeit den Aufnahmedaten.
Ich suche jetzt eine Möglichkeit, für alle Bilder die Datei-Daten in die EXIF-Daten über eine Batchverarbeitung zu übertragen.

Bonsai

ralfeberle
01.11.06, 23:48:14
Hallo Azure!

Welches Datum soll denn in die EXIFs - und woher soll es eine Stapelverarbeitung holen/bekommen? In FixFoto kann man Skripte schreiben, auch um die EXIFs zu bearbeiten. Im Prinzip kannst Du also dort alles eintragen lassen was Du möchtest. Ggf. wäre es denkbar, bei einer Stapelverarbeitung als Extrembeispiel bei jedem Bild anhalten, ein Eingabefeld fürs gewünschte Datum aufpoppen lassen und dieses dann in die EXIFs übertragen lassen. Es ist fast alles machbar.

Gruß,

Ralf

PS. Eventuell helfen auch schon die Skripte EditEXIFInfos oder Saver4 weiter, siehe
http://www.ffsf.de/local_links.php?catid=11
Kannst ja mal den Autor dazu noch interviewen, falls das Ausprobieren erst mal zu schwierig scheint. Oder Heinz 'hhoefling' kann auch hier gleich was dazu sagen.

hhoefling
02.11.06, 00:17:11
Mit EditExifInfos ist es möglich die drei Datumsangaben in den Exif Daten zu setzen.
Jedes Bild einzeln......viel Arbeit.....

Mit einem Script liesse sich das Automatisch machen, da, so wie ich ihn verstanden habe, das Datum im Dateinamen enthalten ist.

EditExifInfos war Ursprunglicht zur nachbearbeitung für Exiflose Scans gedacht.
Wenn schon Exifdaten vorhanden sind werden diese zur Änderung angeboten.
Aber die Datumsfelder müssen eingetippt werden. Es gibt zwar einen Knopf für "Heute"
aber der hilf hier nicht weiter.

Benutzung:
Ein Bild selektieren, dann über F10, oder dazu angelegtem Tastenkürzel, EditExifInfo aufrufen.
Oder als Erweiterungsscript von Saver3/4 automatisch von FF beim Speichern aufrufen lassen.
Das letzte geht leider nicht in Zusammenarbeit mit der Stapelverarbeitung.

m.s
02.11.06, 06:21:37
Ich suche jetzt eine Möglichkeit, für alle Bilder die Datei-Daten in die EXIF-Daten über eine Batchverarbeitung zu übertragen.
Sollte über das Kontextmenü der Computer-Ansicht und erstens "Exif/leeren Exif-Eintrag erzeugen" und zweitens "Exif/Exif-Datum übernehmen" gehen. Vorher alle Bilder markieren.

hhoefling
02.11.06, 09:22:04
@Micha, und wie bitte holte sich FF das Datum aus dem DATEINAMEN?

m.s
02.11.06, 09:26:30
Allerdings entspricht das Datei-Datum und die Zeit den Aufnahmedaten.
Ich war jetzt nach dem gegangen. ;)

hhoefling
02.11.06, 09:29:54
@Micha, Ok das Hilft dann zumindest Bonsai

KarstenMeyer
02.11.06, 10:52:01
nur mal so am Rande und auf die Gefahr hin, mich in die Nesseln zu setzen:
Wenn jemand Bilddateien ohne EXIF-Daten hat, bei denen aber (noch) das Dateidatum dem Aufnahmedatum entspricht, wäre ich mit den Originaldateien sehr vorsichtig. Es könnte sonst passieren, dass "alles weg" ist - zumindest im Fehlerfall.

Mir ist nämlich vor ein paar Wochen sowas ähnliches mit älteren Bildern (aus meiner Agfa EPhoto 1680 selig) passiert - die haben noch keine EXIF-Daten. Ich wollte die Sofware Picajet testen, die Kategorien in IPTC-Daten der Bilder unterbringt - die versagte mit diesen alten Bildern, setzte aber beim Speichern das Dateidatum neu...
Wenn ich keine Sicherung gehabt hätte, wäre die Information über das Aufnahmedatum flöten gewesen.

Als weiteres ist meine Inforamation über die Scriptverarbeitung in FF die, dass beim Ändern der EXIF-Daten immer das Dateidatum aktualisiert wird. Das geht mir jedenfalls so, wenn ich das Speicherskript verwende, und ich finde das sehr schade. (Oder ist dieses Problem längst beseitigt und ich weiß es nur nicht?)

Schönen Gruß,
Karsten

PS: Zur Ehrenrettung von Picajet: Die Entwickler hatten recht schnell reagiert und die Möglichkeit eingebaut, das Dateidatum zu belassen. Ich bin aber durch den Vorfall sehr vorsichtig geworden und konnte mich noch nicht zum Einsatz solcher Software entschließen.

bonsai
02.11.06, 19:43:11
@Micha

Das hatte ich schon versucht, aber FF trägt dann das aktuelle Datum in die EXIF-Infos ein.
Vielleicht habe ich mich auch mißverständlich ausgedrückt, die Zeitinfos der Image-Dateien im Filesystem entsprechen den Aufnahmedaten.

Habe eine Möglichkeit gefunden, die Daten per Mausklick zu übernehmen (www.infogucker.de),
aber das geht dann leider nur one by one und nicht im batch...

Trotzdem Dank an Alle!
mfg

hhoefling
02.11.06, 20:13:17
Tja, da haben wir beide, Micha und ich, nicht aufgepasst.
Die Funktion die Micha vorschlägt arbeitet genau andersherum:
EXIF->Dateidatum und nicht Dateidatum->Exif wie du es brauchst.
Wenn FF keine Exifdaten hat, dann nimmt es dabei wohl das Tagesdatum.

Das ganze ist aber über das Scripting zu machen.
Nur gibt's noch kein fertiges Script hierfür.

bonsai
02.11.06, 20:30:09
Hallo Heinz,

kann mir schon denken, daß das via Scripting zu lösen wäre, aber ich bin eher Techniker als Programmierer ;-) Sind ca. 150 Bilder, werde sie dann wohl einzeln editieren...

mfg
Bonsai

Azure
03.11.06, 00:38:45
Erstmal danke für die vielen schnellen Antworten :)



ich suche halt irgendetwas, das aus dem Dateinamen das Datum herauslesen kann.
Also zum Bsp aus "2006-01-08 DSC00128.JPG" sich bei den ersten 10 Stellen das Datum herausliest und das dann dementsprechend in die Exif einträgt.

Mit dem EditExifInfo klappt das ja nur manuell, da kann ich zwar leicht und einfach das Datum ändern, aber nur einzeln und ohne Automatismus?
Und bei Saver4 sind doch gar keine Datumsänderung möglich?


Bei MP3 und den ID3 Tags ist sowas ja Gang und Gebe - dass es das anscheinend nirgends für Fotos gibt |)
Ich werds vllt mal versuchen zu programmieren, werd mich dann da mal "reinfuchsen" müssen, wie das hier funktioniert und wie ich die Exif anspreche 8-)

thomasstolz
05.02.07, 13:18:44
HAllo,
habe ein ähnliches Problem: Möchte für meine Galerie die EXIF Daten löschen, das geht ja wunderbar. Allerdings brauche ich das Feld Exif-Datum weiterhin zur Sortierung in der Galerie. Als müsste das Feld ausgelesen werden, dann alle Exif Daten gelöscht werden und anschließend nur wieder das Exif Datum geschrieben werden. Hat hier jemand eine Lösung. Am besten als Script. Hab im JAhr mehrere tausend Bilder mit denen ich das machen muss.
Danke und Grüße
Thomas

hhoefling
05.02.07, 13:53:34
Ich hatte mal ein Bost-Script geschrieben, es heist "ReduceExif.js"
(in X:\Programme\FixFoto\BatchScript\Boost) und ist so weit ich weiss
inzwischen im Lieferumfang von FF.
Es wirft die Makernotes und das Vorschaubild raus. Die Exif schrumpfen dadurch auf ca. 500Bytes
Genau richtig für Webgalerien.

HeiM
05.02.07, 16:44:37
...und ist so weit ich weiss inzwischen im Lieferumfang von FF.

Es ist drin. Aber wo hat es sich / trägt es sich ein. Ich finde es im Aufgabenbereich nicht. Auch nach nochmaliger Konfiguration trägt es sich nicht ein.
Und wie wirkt es? Auf geladenes Bild / Bilder (im Stapel) oder auf das Exifverzeichnis?

W.P.
05.02.07, 17:37:49
Hallo Heinz,

Boost-Scripte sind Erweiterungen(zusätzliche Befehle) der Stapelverarbeitung und Du findest Sie im Stapelverabeitungs-Dialog auch unter Erweiterungen.
Wenn Du sie im Aufgabenbereich finden willst, musst Du erst einen Stapelauftrag erstellen und diesen abspeichern.

HeiM
05.02.07, 18:14:06
Danke Werner,
alles klar und gefunden unter "Exif Daten reduzieren" und "Exif-Vorschau entfernen" :D

Mecki14
08.02.07, 12:11:35
..also müsste das Feld ausgelesen werden, dann alle Exif Daten gelöscht werden und anschließend nur wieder das Exif Datum geschrieben werden

Das müsste mit folgendem Skript-Code funktionieren:
'FFSubmenu=Exif
'FFName=Exif-Datum setzen

'*************************************************************************
'ExifDate_Set.vbs / Version 1.04 - 09.02.2007
'Vorhandenes Aufnahmedatum wird abgespeichert
'Alle Exif-Daten werden gelöscht und abgespeichertes Datum wieder gesetzt
'*************************************************************************

option explicit
dim Antwort, Imagecount, img, Name, Datum, Jetzt

imagecount = FF_GetImageCount 'Bilderzahl
if ImageCount = 0 then
msgbox "Es ist kein Bild markiert!"
else
Antwort = msgbox("Vorhandene Exif-Daten werden bis auf das Aufnahmedatum gelöscht.",vbOkCancel,"Achtung")

if Antwort = vbOk then

Jetzt = ConvertDateTime2Exif(Now) 'jetzigen Zeitpunkt ermitteln
' und in Exif-Format wandeln
for img=0 to imagecount-1
Name = (FF_GetImageName(img)) 'Bildername
FF_LoadImage(Name) 'Bild laden

if FF_HasExif() then
Datum = FF_GetExifTag("DateTimeOriginal") 'fragt vorhandenes Datum ab
FF_CreateExif() 'erzeugt neue Exif-Datei
FF_SetExifTag "DateTimeOriginal", Datum 'setzt Aufnahmedatum
FF_SetExifTag "DateTimeDigitized", Datum 'Digitalisierung und Speicherung
FF_SetExifTag "DateTime", Jetzt 'Zeitpunkt der letzten Änderung
FF_SaveExif Name 'speichert Exif-Datei
end if

next

msgbox "Es wurden alle markierten Bilder behandelt."
end if
end if
'--------------------------------------------------------------------------------------------------
'Formatkonvertierung
Function ConvertDateTime2EXIF(vDateTime)
ConvertDateTime2EXIF = _
CStr(Year(vDateTime)) & ":" & _
FormatNum(Month(vDateTime), 2) & ":" & _
FormatNum(Day(vDateTime), 2) & " " & _
FormatNum(Hour(vDateTime), 2) & ":" & FormatNum(Minute(vDateTime), 2) & ":" & FormatNum(Second(vDateTime), 2)
End Function
'--------------------------------------------------------------------------------------------------
'Erzeugt führende Nullen für Zahlen
Function FormatNum(vNumber, lDigits)
If Len(CStr(vNumber)) >= lDigits Then
FormatNum = CStr(vNumber)
Exit Function
End If
FormatNum = Right(String(lDigits, "0") & CStr(vNumber), lDigits)
End Function
'--------------------------------------------------------------------------------------------------
Die Bildinformationen Pixelgröße, DPI und Größe werden allerdings automatisch erzeugt und wieder hinzugefügt, ebenso das Minivorschaubild.
Probier das mal aus.

Der Code wurde wegen einiger Fehler mit Hilfe von W.P. komplett überarbeitet.
Am 9.2.07 Warnung, dass alle Exif-Daten bis auf das Daum gelöscht werden, hinzugefügt.

W.P.
08.02.07, 14:12:47
Hallo Mecki14,

um einen gültigen Exif-Bereich zu schreiben sind noch zwei Tags mit gültigen Daten notwendig:
DateTimeDigitized: Gleichen Wert wie DateTimeOriginal
DateTime: Zeit der letzten Änderung im Exif-Format; sprich der Zeitpunkt, wann das Bild oder der Exif-Bereich zum letzten Male geändert wurde, also das Skript ausgeführt wird.

Werden diese beiden Werte nicht gesetzt, erzeugt FF jeweils einen leeren Tag für die Werte. Dies gibt bei einigen Exif-Readern große Probleme. DateTime muss außerdem immer vorhanden sein, da Minimalvoraussetzung laut Standart.

Mecki14
08.02.07, 16:07:59
Hallo Mecki14,
um einen gültigen Exif-Bereich zu schreiben sind noch zwei Tags mit gültigen Daten notwendig ...

Vielen Dank für den Hinweis. Ich habe den Code oben entsprechend ergänzt. Ich hoffe, so ist es richtig.

W.P.
08.02.07, 16:40:03
Hallo Mecki14,

bei DateTime kannst Du nicht einfach Date einsetzen.
Das Exif-Zeitformat ist IMMER wie folgt: JJJJ:MM:DD hh:mm:ss
Wenn Du einfach Date einsetzt wird irgendein Zeit-String eingesetzt, der ja nach System unterschiedlich als default eingesetzt ist.
Foglich musst Du es auf das Exif-Zeit-Format bringen.
Z. B. so:
FF_SetExifTag "DateTime", ConvertDateTime2Exif(Now)
...
'Formatkonvertierung
Function ConvertDateTime2EXIF(vDateTime)
ConvertDateTime2EXIF = _
CStr(Year(vDateTime)) & ":" & _
FormatNum(Month(vDateTime), 2) & ":" & _
FormatNum(Day(vDateTime), 2) & " " & _
FormatNum(Hour(vDateTime), 2) & ":" & FormatNum(Minute(vDateTime), 2) & ":" & FormatNum(Second(vDateTime), 2)
End Function
'Erzeugt führende Nullen für Zahlen
Function FormatNum(vNumber, lDigits)
If Len(CStr(vNumber)) >= lDigits Then
FormatNum = CStr(vNumber)
Exit Function
End If
FormatNum = Right(String(lDigits, "0") & CStr(vNumber), lDigits)
End Function

Mecki14
08.02.07, 17:20:02
Hallo Mecki14,
bei DateTime kannst Du nicht einfach Date einsetzen.
Das Exif-Zeitformat ist IMMER wie folgt: JJJJ:MM:DD hh:mm:ss

Man lernt doch nie aus. Ich habe Deinen Code nachvollziehen können und habe mir erlaubt, ihn oben einzusetzen. Dank Deiner Unterstützung wird es jetzt hoffentlich funktionieren.

Jochen
08.02.07, 19:30:47
Man lernt doch nie aus. Ich habe Deinen Code nachvollziehen können und habe mir erlaubt, ihn oben einzusetzen. Dank Deiner Unterstützung wird es jetzt hoffentlich funktionieren.


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function FormatNum(argNumber, argDigits)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

If Len(argNumber) >= argDigits Then
FormatNum = argNumber
Exit Function
End If

FormatNum = Right(String(argDigits,"0") & argNumber,argDigits)

End Function

Das Gecaste sieht zwar sauber aus, macht aber nicht viel Sinn, wenn nicht unbedingt erforderlich. String-Anweisungen und -Operatoren erzwingen interne Typwandlung, externes Casten erfordert weit mehr Rechenaufwand.
Sieh Dir den Rest von dem Code daraufhin vielleicht besser noch mal an.
Es ist guter Stil, seine Funktionsargumente als solche kenntlich zu benennen - bei langen Funktionsblöcken liest es sich leichter.

Mecki14
09.02.07, 12:36:58
Das Gecaste sieht zwar sauber aus, macht aber nicht viel Sinn, wenn nicht unbedingt erforderlich. String-Anweisungen und -Operatoren erzwingen interne Typwandlung, externes Casten erfordert weit mehr Rechenaufwand.
Die Diskussion überfordert mich total. W.P. ist da sicher der bessere Ansprechpartner.
Ich selbst habe mir vor Jahren mal ein paar Grundkenntnisse in VB angeeignet und bin durch FixFoto dazu gekommen, diese auf Skripte anzuwenden. Dabei versuche ich durch Analyse von vorhandenen Skripten zu lernen und bediene mich ansonsten der Referenz in der FixFoto-Hilfe und der WINDOWS-Skript-Dokumentation V5.6.
Wenn mir jemand eine leicht verständliche Einführung empfehlen kann, würde ich dieser gerne folgen.

Jochen
09.02.07, 13:08:31
Wenn mir jemand eine leicht verständliche Einführung empfehlen kann, würde ich dieser gerne folgen.Sehr zu empfehlen sind die Scripting - Bücher von Tobias Weltner (bei Franzis) und Holger Schwichtenberg (bei Addison Wesley z.B). Von Weltner gibt es ausgesprochen gute Anfängerbücher. Auch zu empfehlen ist "Windows Scripting Guide" von Peter G. Aitken (bei Markt und Techik). Alle Bücher kann man versuchen bei Amazon gebraucht zu bekommen, dann sind sie weitaus billiger.

ralfeberle
09.02.07, 13:17:27
Hallo!

Meine Empfehlung für gebrauchte Bücher wäre www.booklooker.de ;)

Gruß,

Ralf

Mecki14
09.02.07, 16:25:16
Vielen Dank für die Bücher-Tips. Ich habe gerade bei Amazon
"Windows Scripting - Der Einsteiger-Workshop" von Tobias Weltner
bestellt. Ich bin gespannt!
Der Tip mit booklooker war zwar interessant, aber in diesem Fall war der Kauf unter Berücksichtigung der Versandkosten bei Amazon günstiger.

thomasstolz
09.02.07, 19:11:23
Hallo,

hab jetzt das Teil gefunden. Im Boost Verzeichnis hesst das File ReduceExif.js. Dann F11 Button automatisch konfigurieren. Aber kein Eintrag unter Exif mit reduceExif. Kann es sein das es dort "kopiere Datum" heißt?
Grüße
Thomas

hhoefling
09.02.07, 19:52:33
Im Boost Verzeichnis hesst das File ReduceExif.js.

Boost-Scripte heisten so, weil es eben keine normalen Scripte sind.
Sie sind nur in der Stapelverabeitung zu verwenden.

W.P.
10.02.07, 14:01:43
Hallo Jochen,

mal komplett OT:
Also mal durchgetestet:
Das Einzige, was einen zeitlichen Unterschied hervorruft ist folgende Zeile:
Len(argNumber) vs. Len(CStr(vNumber))
Dies kommt daher, dass beim Casten temporär eine Umrechnung als String wirklich explizit erfolgt. Übrigens bringt es auch nichts, extra eine Variable anzulegen, der eine gekastete Nummer übergeben bekommt. Die Kopieraktion dauert wesentlich länger.
Das Fatale an dieser Zeile ist: Sie funktioniert bei Dir so nur in VBScript, aber nicht in VBA oder VB, da sonst die Datenbreite der Variable zurückgegeben wird. Mal abgesehen davon, dass es dort den Format-Befehl gibt.
Alle anderen Casts erzeugen keinen zeitlichen Unterschied, wobei die unveränderte Rückgabe bei mir immer einen String liefern würde, egal ob die Rückgabe der Funktion per Definition generell als String gecastet wird oder nicht.
Mit Vorgabe von arg... etc. hast Du sicher recht. Mir hilft es aber mehr den gewollten Datentyp anzugeben. Lediglich bei extrem kritischen unabhängigen Funktionen oder generell Klassenvariablen werden die internen Variablen mit einem f_... bzw. mv_ -Vorsatz gekennzeichnet.

Ansonsten verlasse ich mich auf den Gültigkeitsbereich der Variablen und Option Explicit. Allerdings achte ich darauf, dass auf Globaler Ebene nie all zu viele und vor alle nie einfache Variablen stehen, wie z. B. "i"(außer in kleinen Test-Scripts). Meist erhalten globale Variablen bei mir den Vorsatz g_... oder nur g... z. B. bei gDebug.
Ausnahmen: fso, Dlg (Für Hauptdialog bei FF-Scripten, da meist spezielle Informationen darin enthalten sind), oSh und oINI

thomasstolz
15.04.07, 07:50:00
Hallo,

danke erst mal. Hab nun das Script mit PS-PAd und in Unterordner Batch abgelegt. Im Scripot Editor ist es auch drin. Allerdings nicht da wo ich es brauche. Sollte als letzter Punkt in einer Stapeverarbeitung sein. Also zur Auswahl stehen bei den Punkten Stapelverarbeitung. EIne Abfrage ist hier auch eher ungünstig, möchte das ja im Stapel mit mehreren Fotos laufen lassen.
Grüße
Thomas

W.P.
15.04.07, 11:28:19
Hallo Thomas,

Skripte für die Stapelverarbeitung sind spezielle Skripte(eigentlich Skript-Schnipsel), die ausschließlich in JScript geschrieben sind.
Dieses Skript läßt sich nicht in die Stapelverarbeitung einbinden. Da nützt es auch nichts, es nach ...\Batch zu verschieben.
Es wird über F10 gestartet, nachdem Du Deine Bilder markiert hast.

eike
23.05.09, 12:21:29
Ich häng mich hier mal dran, weil das Thema am nächsten an meinem Wunsch ist.

Meine erste Digi, die Camedia 1400XL hat schöne Bilder gemacht, kannte aber noch kein EXIF. Ich bin dabei mein Archiv neu zu ordnen, wobei EXIF und IPTC eine gewissen Rolle übernehmen sollen.

Ich habe festgestellt, dass meine Sicherungen zum großen Teil noch die originalen Dateidaten besitzen, die ich mir zu Nutze machen möchte, indem ich wenigstens das richtige Aufnahmedatum nach EXIF portiere. Die Zeit mag dann der Umbenennung und Sortierung dienen.

Mir fehlt hierzu ein einfaches Skript, mit dem ich verzeichnisweit in JPEGs

leere EXIF-Felder erzeuge,
das Dateidatum des jeweiligen JPEG-Files lese (FF_GetFileDate),
hieraus eine EXIF-Aufnahmezeit (DateTimeOriginal) baue
diese in EXIF eintrage.


[edit]
Anfrage gelöscht, weil sich gerade extern eine Lösung mit ExifViewer (http://www.amarra.de/exif.htm) ergeben hat. Die Oberfläche wirkt zwar altbacken, ist bis 2007 aktuell gehalten (aber der Installer auf Vista gepflegt) und wirksam, wie es nach dem ersten Test scheint.