Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 08. Januar 2017 15:22

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Exif-Daten von Bildern auslesen und anzeigen

Ihr kennt doch die Portale, die Bilder zum Download anbieten, wie zum Beispiel Pixabay. In der Detailansicht werden dann diverse Daten zum Bild angeboten, die von der Kamera über die Auflösung, Brennweite und Belichtungsdauer bis hin zu den GPS-Koordinaten uvm. gehen können. Kommt ziemlich professionell rüber.

Lässt sich auch mit CMSMS einfach umsetzen.

Angenommen, ihr habt bereits eine Bilder-Galerie und wollt diese mit einem derartigen Feature aufrüsten. Schlüssel hierzu ist der PHP-Befehl exif_read_data(). Dieser liest sämtliche vorhandenen Exif-Daten eines Bildes aus und liefert sie in einem Array zurück. Exif-Daten sind die Meta-Daten eurer Bilder.

Funktioniert praktisch in CMSMS so

{$exif = exif_read_data({$ipath}, 'IFD0')}

Hinter $ipath verbirgt sich der Systempfad des Bildes, NICHT die URL. Wie ihr eine URL in den Systempfad konvertieren könnt, habe ich hier gezeigt

https://www.cmsmadesimple.de/forum/view … hp?id=4963

Vor dem praktischen Einsatz solltet ihr allerdings eure Bilder prüfen, welche EXIF-Daten vorhanden sind. Diese sind zwar grundsätzlich standardisiert, aber da hat jeder Kamera-Hersteller so seine eigenen Vorstellungen, was geschrieben wird.

Funktioniert in CMSMS so (nach vorstehendem Befehl einfügen)

Der Output sah in meinem Fall so aus

Array
(
    [FileName] => Tilli.jpg
    [FileDateTime] => 1419676580
    [FileSize] => 237278
    [FileType] => 2
    [MimeType] => image/jpeg
    [SectionsFound] => ANY_TAG, IFD0, COMMENT, EXIF
    [COMPUTED] => Array
        (
            [html] => width="1280" height="960"
            [Height] => 960
            [Width] => 1280
            [IsColor] => 1
            [ByteOrderMotorola] => 0
        )

    [Make] => VTech
    [Model] => Kidizoom camera
    [Exif_IFD_Pointer] => 72
    [COMMENT] => Array
        (
            [0] => GPEncoder
        )

    [DateTimeOriginal] => 2014:12:27 11:36:20
)

Yep, richtig gesehen - für dieses HowTo musste der Einfachheit halber die Kamera meiner kleinen Tochter herhalten big_smile. Bei Profi-Modellen sind es natürlich deutlich mehr Daten.

Praktisch an dieser Ausgabe, dass man bereits hier erkennen kann, wie man die Elemente des generierten $exif Arrays zur Anzeige bringt. So findet sich z.Bsp. für das Kamera-Modell dieser Eintrag

[Model] => Kidizoom camera

Angezeigt werden kann dies mit

Manche Werte wie zum Beispiel der Zeitstempel oder die Dateigröße liegen aber als unformatierte Rohdaten vor, weshalb sie für die Anzeige noch etwas überarbeitet werden müssen.

[FileDateTime] => 1419676580
    [FileSize] => 237278

Der Zeitstempel ist ein Unix Zeitstempel und kann so über den in CMSMS mitgelieferten Modifikator cms_date_format formatiert werden.

{$exif.FileDateTime|cms_date_format:'%d. %B %Y'}

Wie sich die Dateigröße formatieren lässt, hab ich hier gezeigt

https://www.cmsmadesimple.de/forum/view … hp?id=4770

Zusammengefasst in einem erweiterungsfähigen Basis-Script sieht das dann so aus

{$ipath = "{$smarty.server.DOCUMENT_ROOT}{$iurl|parse_url:$smarty.const.PHP_URL_PATH}"}
{$exif = exif_read_data({$ipath}, 'IFD0')}
<p>Erstellt: {$exif.FileDateTime|cms_date_format:'%d. %B %Y'}</p>
<p>Auflösung: {$exif.COMPUTED.Width} x {$exif.COMPUTED.Height}</p>
<p>Dateigröße: {$exif.FileSize|formatsize}</p>
<p>Kamera: {$exif.Make} {$exif.Model}</p>

Ausgegeben wird dann dies

Erstellt: 27. Dezember 2014

Auflösung: 1280 x 960 Pixel

Dateigröße: 231.72 Kb

Kamera: VTech Kidizoom camera

Ergänzen könnte man das Script um eine Prüfung, ob die EXIF Erweiterung aktuell auf eurem Host bzw. Server geladen ist. Dies lässt sich über eine Prüfung der Existenz der genutzten Funktion erledigen

{if function_exists('exif_read_data')}
...
{/if}

Zudem sollte man bei kritischen EXIF-Daten (also Daten, die nicht in jedem Bild vorhanden sind), vorher dessen Existenz prüfen

{if $exif.Make && $exif.Model}
  <p>Kamera: {$exif.Make} {$exif.Model}</p>
{/if}

Das komplette Script sähe in diesem Fall so aus

{if function_exists('exif_read_data')}
  {$ipath = "{$smarty.server.DOCUMENT_ROOT}{$iurl|parse_url:$smarty.const.PHP_URL_PATH}"}
  {$exif = exif_read_data({$ipath}, 'IFD0')}
  <p>Erstellt: {$exif.FileDateTime|cms_date_format:'%d. %B %Y'}</p>
  <p>Auflösung: {$exif.COMPUTED.Width} x {$exif.COMPUTED.Height}</p>
  <p>Dateigröße: {$exif.FileSize|formatsize}</p>
  {if $exif.Make && $exif.Model}
    <p>Kamera: {$exif.Make} {$exif.Model}</p>
  {/if}
{/if}

Viel Spaß damit!

Offline

#2 08. Januar 2017 15:50

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Exif-Daten von Bildern auslesen und anzeigen

Übrigens, falls ihr das Script an mehreren Stellen eurer Webseite einsetzen wollt, bietet sich natürlich auch der Einsatz dieses Tricks an

https://www.cmsmadesimple.de/forum/viewtopic.php?id=572

So müsst ihr nicht immer den ganzen Block auf's Neue einfügen wink

1. Falls nicht vorhanden, Verzeichnis /tmp/templates anlegen
2. Snippet in einer Datei als exif.tpl speichern
3. exif.tpl nach /tmp/templates hochladen
4. Aufruf an den gewünschten Stellen mittels

Offline

#3 10. Januar 2017 22:50

pWorker
probiert CMS/ms aus
Registriert: 20. Oktober 2016
Beiträge: 78

Re: Exif-Daten von Bildern auslesen und anzeigen

Der Zeitstempel ist ein Unix Zeitstempel und kann so über den in CMSMS mitgelieferten Modifikator cms_date_format formatiert werden.

Die Info brauchte ich für ein anderes Problem. Immer wieder hilfreich hier im Forum rumzulungern wink

Offline

#4 11. Januar 2017 10:27

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Exif-Daten von Bildern auslesen und anzeigen

pWorker schrieb:

Die Info brauchte ich für ein anderes Problem.

Naja, bißl sind wir hier auch auf externen Input angewiesen.

Manche Dinge sind zwar banal, aber vielen so oder zumindest in deren möglichen Anwendungen nicht bekannt. Von daher isses für diejenigen, die sich schon länger damit beschäftigen, immer die Frage, welche HowTos bzw. Informationen gewünscht und benötigt sind.

Offline

#5 11. Januar 2017 10:47

pWorker
probiert CMS/ms aus
Registriert: 20. Oktober 2016
Beiträge: 78

Re: Exif-Daten von Bildern auslesen und anzeigen

Ist auch so. Mittlerweile benutze ich viele Module nur noch als Skelette auf die ich dann deren Funktionen aufsetze wink - Mein globales Ziel ist es das CG Calender Modul vollumfänglich zum Laufen zu bringen...bin bei 80%.

Offline

#6 11. Januar 2017 22:09

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Exif-Daten von Bildern auslesen und anzeigen

pWorker schrieb:

benutze ich viele Module

Nur so nebenbei ... das "viele Module" auf die Performance drücken, weißt du sicherlich?!

Oder anders formuliert - besser eines richtig als viele nur halb big_smile.

Offline

#7 12. Januar 2017 11:07

pWorker
probiert CMS/ms aus
Registriert: 20. Oktober 2016
Beiträge: 78

Re: Exif-Daten von Bildern auslesen und anzeigen

Viele in Relation zur Gesamtheit der Module über die ich in der Form keine Aussage gemacht habe wink - Ist halt auch eine sehr komplizierte und umfangreiche Geschichte dieses Portal. Indem ich den Calender richtig nutze, fehlt mir trotzdem noch die User Directory. Selfreg und Feu auch unerlässlich, 1 Sicherheitsmodul, Captcha, Simpleblah, CgExtensions ... fällt schwer da eins raus zu nehmen und durch ein anderes zu ersetzen.

Offline

#8 12. Januar 2017 13:59

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Exif-Daten von Bildern auslesen und anzeigen

pWorker schrieb:

eine sehr komplizierte und umfangreiche Geschichte dieses Portal.

CMSMS != Portal wink

Offline