IPTC-Daten auslesen

Hallo in die Runde.
Ich wollte schon vor Jahren IPTC-Unterstützung in mein Programm einbauen und habe das immer mal wieder in Angriff genommen.

Letzter Anlauf war letztes Jahr. Da habe ich mir die XMP-Funktionen vom MBS-Plugin angesehen. Die sehen vielversprechend aus. Vor allem bieten sie lesenden und schreibenden Zugiff auf die Daten.

Ich habe mir auch das mitgelieferte Beispielprojekt angesehen. Allerdings habe ich es damit nicht geschafft, aus einem Beispielbild die IPTC-Daten auszulesen und habe mich wieder anderen Funktionen zugewand.

Jetzt kam in meiner Mailingliste das Thema IPTC erneut auf und ich möchte einen neuen Versuch starten.

Nutzt hier jemand die MBS-Plugins zum lesen (und schreiben) von IPTC-Daten in seinem Projekt?

Mir würde es helfen, wenn ich ein Beispiel bekommen könnte, dem man ein Bild übergibt und in einem (oder mehreren) Feld würden die ausgelesenen Daten ausgegeben.

Wichtig sind mir die Informationen, die der Grafikkonverter als Dokumentinformationen ausgibt. Als Beispiel würde mir die Objekteschreibung reichen.

Gruß, Stefan Mettenbrink.

PS: Hat keine Eile, ich komme die nächste Woche ohnehin nicht dazu.

Ich habe das mit dem “exiftool” und einer shell gemacht. Für macOS und Windows. Das war einfacher und schneller.
Download exiftool

Das MBS Xojo XMP Plugin macht halt vieles. IPTC ist ja nur eins davon.

Ansonsten wren noch die Mac Klassen mit CGImageSourceMBS und GraphicsMagick hat auch noch Attribute im GMImageMBS.

Mit Shell habe ich keine Erfahrung. Wenn Du ein Beispiel hast, schau ich mir das mal an.

-> Christian
Das XMP-Plugin wre meine Wahl. Dazu gibt es ja auch ein Beispiel. Nur habe ich damit keinen Erfolg gehabt. Darum frage ich hier ja nach jemanden, der das erfolgreich nutzt.

Gru Stefan

Wie sieht Dein Code aus? Hast Du ein Beispiel-Bild bei dem es nicht geklappt hat?

Ich habe vor ein paar Wochen einen Blick auf Graphics-Magick geworfen, weil ich Bilder umdrehen mute. Da waren die IPTC-Daten auch zu sehen.

Die ausführbare Datei “exiftool” und den Ordner “lib” in den Ordner Appname.app/Contents/MacOS kopieren. Am besten beim Build innerhalb von Xojo. Oder Exiftool.pkg auf dem Rechner installieren.

// Lesen der Exif Daten aus einem FolderItem:

if PictureFile <> nil then

dim ExifShell as new shell
dim cmd as string
dim LangOpt as string
dim ExecFolder as FolderItem
ExecFolder = GetFolderItem("")
if OSLang = “de” then
LangOpt = " -lang de "
else
LangOpt = “”
end if

Mit EXIFTOOL:

#if TargetWin32 then
cmd = ExecFolder.NativePath + "exiftool.exe -n -a " + LangOpt + " " + PictureFile.NativePath
#endif

#if TargetMacOS then
ExecFolder = ExecFolder.Child(app.ApplicationNameMBS + “.app”).Child(“Contents”).Child(“MacOS”)
cmd = ExecFolder.ShellPath + “/exiftool” + " -n -a " + LangOpt + “’” + PictureFile.NativePath + “’”
#endif

ExifShell.Execute(cmd)
dim ExifReturn as string
ExifReturn = DefineEncoding(ExifShell.Result,Encodings.UTF8)

dim LinesArray(-1) as string
LinesArray = split(ExifReturn, EndOfLine)
dim LineSplit(-1) as string
dim XSize as integer
XSize = UBound(LinesArray)
dim ExifArray(-1,2) as string
redim ExifArray(XSize,2)
ListboxEXIF.DeleteAllRows

for i as integer = 0 to LinesArray.Ubound
LineSplit = split(LinesArray(i), “:”)
if LineSplit.Ubound > 0 then
if LineSplit(0).len > 0 then
ExifArray(i,0) = LineSplit(0)
ListboxEXIF.AddRow(LineSplit(0))
if LineSplit.Ubound > 0 then
ListboxEXIF.Cell(i,1) = replace(LinesArray(i), LineSplit(0) + ": ", “”)
end if
end if
end if
next
end if