IPTC-Daten löschen per Skript

Mecki14

Mitglied
Registriert
15.03.06
Beiträge
2.831
Ort
Düsseldorf
Trophäen
einige {*} {!} * !
Ich lade ein Bild manuell auf die Arbeitsfläche und führe dann über den Skripteditor die folgende Befehle aus:

Code:
if FF_HasExif() then FF_KillExif
if FF_HasIPTC() then FF_KillIPTC
FF_Reload

Speichere ich das Bild dann manuell (im Speicherdialog bleibt "Exif" angekreuzt"), sind erwartungsgemäß die Exif-Daten gelöscht, nicht aber die IPTC-Daten.
Wie lösche ich in einem über Skript manipuliertem Bild die IPTC-Daten ohne das Bild direkt zu speichern?
Die beiden Befehle FF_SaveIPTC(VT_BSTR path) und FF_KillIPTCData(VT_BSTR path) setzen immer ein bereits abgespeichertes Bild voraus.
 
AW: IPTC-Daten löschen per Skript

Hallo Harald,

FF_KillIPTC wirkt nur, wenn alle IPTC-Datenfelder mit "" gelöscht werden. Dann wird der IPTC-Mantelblock entfernt. Sonst bleibt alles beim Alten. Gleiches gilt für FF_KillIPTCData.
 
AW: IPTC-Daten löschen per Skript

Hallo Werner,
Du hast recht wenn man den IPTC-Mantelblock löschen will. Soll aber nur der Inhalt gelöscht werden, reicht FF_KillIPTC wenn man direkt abspeichert.
Code:
FF_KillIPTC
name = FF_GetImageName(-1)
call FF_SaveImage(name,0)

Gleiches gilt bei einem bereits gespeicherten Bild für FF_KillIPTCData
Code:
name = FF_GetImageName(-1)
FF_KillIPTCData name

Für das was ich möchte bleibt wohl nur übrig nach FF_KillIPTC das Bild temporär zu speichern und dann wieder zu laden.
 
AW: IPTC-Daten löschen per Skript

Hallo Werner,
ich komme nochmal auf Deine Anmerkung zurück:
FF_KillIPTC wirkt nur, wenn alle IPTC-Datenfelder mit "" gelöscht werden. Dann wird der IPTC-Mantelblock entfernt. Sonst bleibt alles beim Alten. Gleiches gilt für FF_KillIPTCData.

Mir gelingt es nicht den IPTC-Mantelblock zu entfernen. Alle IPTC-Datenfelder sind leer, nur "Date Created" und "Time Created" nicht. Diese Datenfelder sind mit
Code:
FF_SetIPTC "DateCreated",""
FF_SetIPTC "TimeCreated",""
nicht zu löschen.
Wende ich FF_KillIPTC oder auch FF_KillIPTCData an, wird der Mantelblock nicht gelöscht, was möglicherweise an "Date Created" und "Time Created" liegt.
Was kann ich tun?
 
AW: IPTC-Daten löschen per Skript

Hallo Harald,

kann nur sagen, dass es funktioniert. Wird ein leerer String oder nichts and DateCreated oder TimeCreated übergeben, wird das jeweilige Feld gelöscht. Ein FF_KillIPTC löscht dann das Mantelfeld.

So ist es in WPIPTC programmiert und es funktioniert auch noch unter FF der aktuellen Version, wie ich gerade prüfte.

Code:
Function WriteIPTCTag(sIPTCTag, ByVal vValue)
	WriteIPTCTag = False
	Select Case LCase(sIPTCTag)
		Case "datecreated"
			If Len(vValue) > 0 Then	vValue = Year(vValue) & Right("0" & Month(vValue), 2) & Right("0" & Day(vValue), 2)
		Case "timecreated"
			If Len(vValue) > 0 Then
				vValue = Replace(Replace(gTimeZone.UTCZeit(vValue), ":", ""), " ", "")
			End If
		Case "urgency"
			vValue = Trim(vValue)
			If Len(vValue) > 0 Then
				If IsNumeric(vValue) = False Then
					Exit Function
				Else
					vValue = CLng(vValue)
					If vValue < 1 And vValue > 8 Then Exit Function
				End If
			End If
		Case "supplementalcategory", "keywords", "specialinstructions", "caption/abstract"
			vValue = CRLFTrim(vValue)
		Case "category", "objectname", "byline", "bylinetitle", "city", "provincestate", "country", "originaltransmissionreference", "headline", "credit", "source", "copyrightnotice", "writer/editor", "sublocation", "countrycode"
			vValue = Replace(Replace(Replace(vValue, vbCRLF, " "), vbLF, " "), vbCR, " ")
			vValue = Trim(vValue)
	End Select
	
	vValue = oCodePages.ConvFromSystem(vValue)
	
	'Längenkontrolle
	Select Case LCase(sIPTCTag)
		Case "objectname", "country"
			vValue = Left(vValue, 64)
		Case "category", "countrycode"
			vValue = Left(vValue, 3)
		Case "specialinstructions", "headline"
			vValue = Left(vValue, 255)
		Case "byline", "bylinetitle", "city", "provincestate", "originaltransmissionreference", "credit", "source", "writer/editor", "sublocation"
			vValue = Left(vValue, 32)
		Case "copyrightnotice"
			vValue = Left(vValue, 128)
		Case "caption/abstract"
			vValue = Left(vValue, 2000)
	End Select
	FF_SetIPTC sIPTCTag, vValue
	WriteIPTCTag = True
End Function
 
AW: IPTC-Daten löschen per Skript

Danke Werner,
ich werde es morgen mal nachvollziehen.
 
AW: IPTC-Daten löschen per Skript

Hallo Werner,
beim Test Deiner WriteIPTCTag-Funktion scheitere ich an der Zeile
Code:
vValue = oCodePages.ConvFromSystem(vValue)
Gibst Du mir bitte nochmal Hilfestellung!
 
AW: IPTC-Daten löschen per Skript

Hallo Harald,

ist eine Klasse, die Zeichenfolgen von einer Codepage nach einer anderen Codepage portiert. Hat mit dem Löschen nichts zu tun. Kannst Du also löschen.
 
AW: IPTC-Daten löschen per Skript

Hallo Werner,
die Zeile habe ich gelöscht und dann noch

Code:
Function CRLFTrim(ByVal sValue)

Do
	If Right(sValue,2)=vbCRLF Then sValue=Left(sValue,Len(sValue)-2) Else Exit Do
Loop

Do
	If Left(sValue,2)=vbCRLF Then sValue=Mid(sValue,3) Else Exit Do
Loop

CRLFTrim=sValue

End Function

hinzugefügt.
Wenn ich dann wie folgt die Funktion aufrufe

Code:
tags = "datecreated,timecreated,urgency,supplementalcategory,keywords,specialinstructions,caption/abstract,category,objectname,byline,bylinetitle,city,provincestate,country,originaltransmissionreference,headline,credit,source,copyrightnotice,writer/editor,sublocation,countrycode"
tArray = split(tags,",")
for each element in tArray
	x = WriteIPTCTag(element,"")
next

FF_KillIPTC
name = FF_GetImageName(-1)
call FF_SaveImage(name,0)

ist der IPTC-Mantel immer noch vorhanden. Betrachte ich die IPTC-Daten, sind sie alle bis auf "datecreated" und "timecreated" gelöscht.
 
AW: IPTC-Daten löschen per Skript

Hallo Harald,

ich habe Dir den Codeschnipsel geschickt, weil er genau so in WPIPTC drin steht. Und er funktioniert auch immer noch, wie ich vor dem Einstellen nochmal getestet habe.

Ich habe keine Ahnung, was da bei Dir anders läuft. Liegt es an den Bildern oder an etwas anderes... Bei mir läuft ein 32-Bit FixFoto auf Vista 32.

WPInfo zeigt ja schön an, ob noch IPTC-Daten da sind.
Ein weiteres, nichtöffentliches Tool von mir zeigt auch an, dass in den JPEGs alle Spuren weg sind.
 
Zurück
Oben