Exif bzw. IPTC
Exif bzw. IPTC
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!
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!
-
- Lazarusforum e. V.
- Beiträge: 3177
- 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
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.ph ... 014#p39014, da C++-Klassen nicht direkt unterstützt werden.
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.ph ... 014#p39014, da C++-Klassen nicht direkt unterstützt werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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
Nö.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?)).
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
Re: Exif bzw. IPTC
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 ...]
-
- Lazarusforum e. V.
- Beiträge: 3177
- 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
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.
weiter hab ich eigentlich auf deren Webseite nicht gelesen...Exiv2 Webseite hat geschrieben:Exiv2 is a C++ library and [...]
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?
Das geht natürlich auch.theo hat geschrieben:Ich selbst hab da den einfachen Weg genommen. Unter Linux rufe ich einfach via TProcess exiftool auf und gut is.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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
libc und Genossen weden in Linux als so "dynamisch" gelinkt. Die sind GPL und offensichtlich nicht "sticky".Socke hat geschrieben:Wenn die Funktionszeiger aber erst zur Laufzeit durch den OS-Linker zugewiesen werden, was ist das dann?
-Michael
-
- Lazarusforum e. V.
- Beiträge: 3177
- 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
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...
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
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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
Da hast Du natürlich (fast) recht.Socke hat geschrieben:Die libc6 auf meinem Debian behauptet unter der GNU LGPL lizenziert zu sein, daher gibts hier auch keine Probleme.
"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.
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: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.
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.Socke hat geschrieben:Ich frage mich nur gerade, wie das mit den Kernel-Syscalls funktioniert...
-Michael
-
- Lazarusforum e. V.
- Beiträge: 395
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Re: Exif bzw. IPTC
Moin,
gibt's zu diesem Thema was neues?
Ich habe mal diese Unit versucht: http://www.delphipraxis.net/185459-exif ... -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?
gibt's zu diesem Thema was neues?
Ich habe mal diese Unit versucht: http://www.delphipraxis.net/185459-exif ... -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?
Re: Exif bzw. IPTC
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) 110-mal heruntergeladen
-
- Lazarusforum e. V.
- Beiträge: 395
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Re: Exif bzw. IPTC
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
[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.
Re: Exif bzw. IPTC
Danke. Seh' gerade, als ich die Demos kompiliert habe, dass HeapTrc eine Menge Speicherlecks beklagt (auch nach Zurückwechseln auf meine ursprüngliche Version).
-
- Lazarusforum e. V.
- Beiträge: 395
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Re: Exif bzw. IPTC
Ich habe keine Speicherleaks in meinem Programm...
Re: Exif bzw. IPTC
Dann liegt das vielleicht an den beigefügten Demos. Übrigens, das EXIF-Demo kann nach deiner Änderung (Entfernen von CommentXXX) nicht mehr compiliert werden.
-
- Lazarusforum e. V.
- Beiträge: 395
- Registriert: Sa 15. Mai 2010, 13:46
- CPU-Target: 64 bit
- Kontaktdaten:
Re: Exif bzw. IPTC
Ich lade heute Abend mein komplettes Projekt hoch.