IPTC-Daten auslesen

  1. 6 months ago

    Stefan M

    Mar 1 Germany, NRW, Kirchlengern (Kr...
    Edited 6 months ago

    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.

  2. Horst J

    Mar 1 Pre-Release Testers, Xojo Pro Europe, Germany, Stuttgart
    Edited 6 months ago

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

  3. Christian S

    Mar 1 Pre-Release Testers, Xojo Pro, XDC Speakers Germany

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

    Ansonsten wären noch die Mac Klassen mit CGImageSourceMBS und GraphicsMagick hat auch noch Attribute im GMImageMBS .

  4. Stefan M

    Mar 1 Germany, NRW, Kirchlengern (Kr...

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

    -> Christian
    Das XMP-Plugin wäre 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

  5. Beatrix W

    Mar 1 Pre-Release Testers Europe (Germany)

    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 mußte. Da waren die IPTC-Daten auch zu sehen.

  6. Horst J

    Mar 2 Pre-Release Testers, Xojo Pro Europe, Germany, Stuttgart

    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

or Sign Up to reply!