Exif bzw. IPTC

Rund um die LCL und andere Komponenten
ufkpra2
Beiträge: 32
Registriert: Fr 14. Mai 2010, 14:47
CPU-Target: i386
Wohnort: Ulm

Exif bzw. IPTC

Beitrag von ufkpra2 »

Hallo.

Kennt von Euch jemand eine Komponente bzw. Bibliothek für Free Pascal, um Metadaten (Exif und/oder IPTC) aus Jpeg Fotos auszulesen bzw. zu schreiben?

Gruß und besten Dank!

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Exif bzw. IPTC

Beitrag von Socke »

Ob es FreePacal-Units gibt, die diese Aufgabe nativ lösen, weiß ich nicht.
Als externe Bibliotheken gibts die libexiv2 http://www.exiv2.org/, welche EXIF, IPTC und XMP-Metadaten bearbeiten kann. Sie ist aber unter der GNU GPL lizensiert (d.h. dein Programm muss auch quelloffen sein (GPL?)).
Da die Bibliothek in C++ geschrieben ist, solltest du dir mal diesen Beitrag ansehen, http://www.lazarusforum.de/viewtopic.php?f=29&t=3943&p=39014#p39014, da C++-Klassen nicht direkt unterstützt werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Exif bzw. IPTC

Beitrag von mschnell »

Socke hat geschrieben:Als externe Bibliotheken gibts die libexiv2 http://www.exiv2.org/, welche EXIF, IPTC und XMP-Metadaten bearbeiten kann. Sie ist aber unter der GNU GPL lizensiert (d.h. dein Programm muss auch quelloffen sein (GPL?)).

Nö.

Die Bibiotheken sind in C geschrieben und müssen deshalb dynamisch angelinkt werden. Dynamisches Linken grenzt die GPL - Lizenz ab. nur statisches Linken ist "sticky". Bei Auslieferung des Programms muss also nur die DLL im Sourcecode mitgeliefert werden.

-Michael

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Exif bzw. IPTC

Beitrag von theo »

Ich selbst hab da den einfachen Weg genommen. Unter Linux rufe ich einfach via TProcess exiftool auf und gut is.

NAME
exiftool − Read/write meta information

SYNOPSIS
exiftool [OPTIONS] [−TAG[[+−<]=[VALUE]] or −−TAG ...] [FILE ...]

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Exif bzw. IPTC

Beitrag von Socke »

mschnell hat geschrieben:Die Bibiotheken sind in C geschrieben und müssen deshalb dynamisch angelinkt werden. Dynamisches Linken grenzt die GPL - Lizenz ab. nur statisches Linken ist "sticky". Bei Auslieferung des Programms muss also nur die DLL im Sourcecode mitgeliefert werden.

Exiv2 Webseite hat geschrieben:Exiv2 is a C++ library and [...]
weiter hab ich eigentlich auf deren Webseite nicht gelesen...

Zum Thema Statisch und Dynamisch kann man sich streiten. Wenn ich über die unit Dynlib die Funktionszeiger erst zur Laufzeit hole, ist das definitiv dynamisch. Wenn ich die compilierten Object-Files bzw. die binären Bibliotheks-Dateien (.lib) in mein Programm linke, ist das definitiv statisch. Wenn die Funktionszeiger aber erst zur Laufzeit durch den OS-Linker zugewiesen werden, was ist das dann?

theo hat geschrieben:Ich selbst hab da den einfachen Weg genommen. Unter Linux rufe ich einfach via TProcess exiftool auf und gut is.

Das geht natürlich auch.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Exif bzw. IPTC

Beitrag von mschnell »

Socke hat geschrieben:Wenn die Funktionszeiger aber erst zur Laufzeit durch den OS-Linker zugewiesen werden, was ist das dann?
libc und Genossen weden in Linux als so "dynamisch" gelinkt. Die sind GPL und offensichtlich nicht "sticky".

-Michael

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Exif bzw. IPTC

Beitrag von Socke »

Die libc6 auf meinem Debian behauptet unter der GNU LGPL lizenziert zu sein, daher gibts hier auch keine Probleme. Wenn aber ein {$linklib XY} für eine GPL Bibliothek auftaucht, wird irgendetwas statisch gelinkt und damit musst du dein Programm auch unter der GPL lizenzieren.

Ich frage mich nur gerade, wie das mit den Kernel-Syscalls funktioniert...
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Exif bzw. IPTC

Beitrag von mschnell »

Socke hat geschrieben:Die libc6 auf meinem Debian behauptet unter der GNU LGPL lizenziert zu sein, daher gibts hier auch keine Probleme.

Da hast Du natürlich (fast) recht.

"Fast" insofern, als dass es bei LGPL auch Probleme mit statischem Linken gibt. Die LGPL verlangt, dass bei dieselben "Sticky" Kriterien wie bei der GPL angewendet werden (also statisches Linken ist "sticky"), dass aber die Auswirkung nicht ist, das das Ganze dann unter LGPL veröffentlicht werden muss, dass es aber dem End-User ermöglicht werden muss, spätere Updates auf die LGPL-Programmteile durchzuführen. Wie dass aber ohne Weitergabe das Source-Codes gehen soll weiß keiner so genau.
Socke hat geschrieben:Wenn aber ein {$linklib XY} für eine GPL Bibliothek auftaucht, wird irgendetwas statisch gelinkt und damit musst du dein Programm auch unter der GPL lizenzieren.
Ja. Durchgesetzt hat sich aber die Auffassung, das das für so-Dateien und DLLs unter GPL eben nicht so ist. (Inwieweit der oben genannt Teil der LGPL wirklich so gemeint ist wie es klingt und inwieweit der auch für .h-Dateien gilt, die zum Anbinden einer so/DLL und für Kernel API calls nötig sind, wird anscheinend immer noch diskutiert.)
Socke hat geschrieben:Ich frage mich nur gerade, wie das mit den Kernel-Syscalls funktioniert...
LGPL: S.o. Syscalls werden selten von "C"-User-Propgrammen direkt gemacht, meist stecken die Libraries. (die FPC-Leute möchten aber lieber das Einbinden der libc abschaffen und die Syscalls alle direkt in die RTL einbauen.) Aber Syscalls sind natürlich kein statisches Linken. Hier wird ja quasi einfach an eine feste Adresse gesprungen.

-Michael

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Exif bzw. IPTC

Beitrag von MitjaStachowiak »

Moin,
gibt's zu diesem Thema was neues?

Ich habe mal diese Unit versucht: http://www.delphipraxis.net/185459-exif-und-vorschaubild-aktuelle-freepascal-kompatible-unit.html, es compiliert, findet aber keine EXIF-Daten. Der Autor schreibt ja auch, dass es Probleme gibt und diese Unit kann nur lesen...

Ich möchte sowohl lesen, als auch schreiben. Eine externe DLL/Anwendung zu verwenden wäre möglich, aber auch so etwas anzubinden, ist Arbeit. Hat jemand einen praktikablen Header?

Also ich erstelle das Bild komplett neu (Resize, Helligkeit, Kontrast, ...), möchte die Exif-Daten aus dem Original übernehmen und zusätzlich einige davon ändern. Wie geht das am besten?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Exif bzw. IPTC

Beitrag von wp_xyz »

Zu Delphi-Zeiten gab es ein Tool namens dEXIF. Es war recht einfach nach Lazarus zu übertragen und hat in dem Fall. in dem ich es brauchte, gute Dienste geleistet, auch wenn es etwas chaotisch programmiert ist - siehe Anhang. Eine neuere Bibliothek ist ccr.exif (https://delphihaven.wordpress.com/ccr-exif/), aber hier hat mich bei der Portierung nach Lazarus jedesmal vorzeitig die Lust verlassen, weiterzumachen, weil es alle neuen Features von Delphi bis zum Exzess ausnutzt...
Dateianhänge
dEXIF.zip
(69.46 KiB) 101-mal heruntergeladen

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Exif bzw. IPTC

Beitrag von MitjaStachowiak »

Danke, ich habe die letzten Tage dies und das verändert und prinzipiell tut es jetzt, was es soll. Ich lese die Exifs ein, schreibe ein paar Werte (z.B. Artist, ImageDescription) und speichere das Ganze wieder in ein frisches Bild (ohne Thumbnail, IPTC, ...). Habe eine Whitelist gemacht, damit nur die "wichtigen" Tags gespeichert werden und vor allem die Funktion CreateExifBuf. Kann gut nachvollziehen, warum das so chaotisch ist - dieses Exif-Standard ist extrem buggy. Das Tag UserComment geht irgendwie nicht. Mein eigenes Programm kann es zwar auch der gespeicherten Datei wieder einlesen, aber alle anderen Programme erkennen es nicht. Hier mal der Anfang des JPGs mit EXIF-Block:

[Edit:] Damit es nicht zig Parallelversionen gibt, habe ich die Unit hier gelöscht, meine aktuellste Version finden Sie im Quellcode von meinem Slideshow-Creator: https://mitjastachowiak.de/?/projects/s ... index.html
Zuletzt geändert von MitjaStachowiak am Sa 23. Jul 2016, 11:25, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Exif bzw. IPTC

Beitrag von wp_xyz »

Danke. Seh' gerade, als ich die Demos kompiliert habe, dass HeapTrc eine Menge Speicherlecks beklagt (auch nach Zurückwechseln auf meine ursprüngliche Version).

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Exif bzw. IPTC

Beitrag von MitjaStachowiak »

Ich habe keine Speicherleaks in meinem Programm...

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Exif bzw. IPTC

Beitrag von wp_xyz »

Dann liegt das vielleicht an den beigefügten Demos. Übrigens, das EXIF-Demo kann nach deiner Änderung (Entfernen von CommentXXX) nicht mehr compiliert werden.

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Exif bzw. IPTC

Beitrag von MitjaStachowiak »

Ich lade heute Abend mein komplettes Projekt hoch.

Antworten