/* browser4exif2csv 1.03a vom 19.09.2003 Autor/Kontakt: Jürgen Galupki Lizenz: http://galupki.de/kontakt/readme-kontakt-lizenz.html Kontakt: http://galupki.de/kontakt/ WWW: http://galupki.de /foto.html oder /php.html ... */ - browsen in einem Verzeichnisbaum der jpg-Bilder mit (+ohne) EXIF (2.2) - Daten enthält, dabei Anzeige (ggf. erzeugen) von Vorschaubildern und EXIF-Daten - extrahieren von EXIF-Daten in CSV-Dateien (insbesondere Canon Powershot A60/A70) (*) - extrahierte EXIF-Daten werden durch Kategorien und Stichworte ergänzt (sofern gewünscht/erfasst) - "Datenbankabfrage" auf Basis der erzeugten CSV-Dateien - stellt Dateninput für eine echte Datenbank/Excel/(...) in Form einer CSV-Datei zur Verfügung * extract/create thumbnail-images (jpg) * extract EXIF-tags (Exif 2.2, Canon Makernotes Powershot A60 und A70) * assignment of categories and references to pictures * extract Exif-tags, categories and references into CSV-textfile * NO use of MySQL Generates CSV-files "on-the-fly" while browsing through directories. User can enter categories and references to every picture if needed. Generated CSV-files are used to realize data base inquiries like: - all pictures category "Vacation" - all pictures referenced by "Flowers" - all pictures in Macro-Mode AND with F-Stop/Number 8 - etc. etc. Sorry, in German language only. Problems: mail... Installation: ============= ************************************************************************************************** ACHTUNG: Benutzung auf eigene GEFAHR (auf die Bilder wird nur lesend zugegriffen; schlimmstenfalls sind erfasste Kategorien / Stichworte weg - die werden nämlich nur in den CSV-Dateien "verwahrt")! Es gibt noch keine Stresstests/Langzeiterfahrungen! ************************************************************************************************** Voraussetzungen: 0. WAMP/LAMP (MySQL wird NICHT benötigt) Umgebung. php compiliert mit EXIF-Unterstützung, möglichst ab 4.3.0, min. 4.2.0, empfohlen 4.3.3 extension=php_exif.dll muss in php.ini eingebunden sein! extension=php_gd2.dll muss in php.ini eingebunden sein! 1. Files in ein Directory (php-enabled) kopieren: exif_readme.txt nach Bedarf index.php liste_exif.php Verzeichnisorientiertes Browsen, Aufbau Vorschauverzeichnis + CSV-Dateien exif.php Routinen zum extrahieren der EXIF-Daten canon.php Routinen zum extrahieren der EXIF- CANON-Makernotes (Exif 2.2, soweit ich es herausbekommen habe) notes.php Routinen zum Vorschauverzeichnis (lesen/schreiben Dateien) liste_exif_search.php Prototyp einer "Datenbankabfrage" auf Basis der erzeugten CSV-Dateien style.css CSS 2. Directory für Vorschaubilder und CSV-Dateien ANLEGEN (Unix/Linux: chmod write für den user des Webservers...) Das Verzeichnis muss beschreibbar sein. Die CSV-Dateien beginnen per default mit "exif_" und enden mit ".txt": exif_dir.txt enthält alle bisher besuchten Verzeichnisse exif_:nr:.txt Bildliste eines Verzeichnisses mit der Nummer :nr: exif_all.txt Bildliste ALLER Verzeichnisse (wird erst durch liste_exif_search.php aufgebaut!) exif_search.txt Wertelisten der Felder (mit Ausnahmen) 3. Achtung: Es sind Variablen im php-Source vorzubelegen, und zwar: Pflicht: $bilder_verzeichnis in liste_exif.php Wurzelverzeichnis aller Bilder $vorschau_verzeichnis in notes.php Verzeichnis für ALLE Vorschaubilder und CSV-Dateien Dieses EINE Verzeichnis MUSS BESCHREIBBAR SEIN (Rechte UNIX!) nice to have: $kbfaktor35mm in exif.php Brennweite die 35mm Kleinbild entspräche (auch wenn Kamera das phys. nicht liefern könnte) $CCDWidth in exif.php Breite des CCDs in mm (Computed-Wert nicht genau genug) $vbg in exif.php Pixelbreite für zu generierende Vorschaubilder $taglist in notes.php Anzuzeigende / nach CSV zu extrahierende Bildwerte (siehe unten) 4. enjoy! Achtung: Die Scripts sind nicht fail-save, d.h. es fehlen Abfragen die zu einer sicheren(!) Ausführung bei einem Provider bzw. allg. zum fehlertoleranten arbeiten nötig wären - insbesondere bei einem "register_globals=ON"! Ausserdem nicht Mehrfachbenutzer/Netzwerkfähig! Ein Bilder-Unterverzeichnis sollte nicht allzuviele Dateien ohne Exif-Daten beiinhalten, da ansonsten beim zeitaufwendigen extrahieren/erzeugen der Vorschaubilder der php-timeout möglicherweise zuschlägt. Die Routinen zur Erzeugung von Vorschaubildern im Falle eines Bildes OHNE vorbereitetes Vorschaubild sind sehr resourcenhungrig, da freut sich wahrscheinlich jeder Provider - also eher etwas für eine Entwicklungs- umgebung. Abhilfe Abbruch: php-timeout erhöhen oder bei Anzeige der timeout-Fehlermeldung einfach einen Seitenreload so oft durchführen, bis alle Vorschaubilder angelegt sind. Sobald alle Vorschaubilder extrahiert vorhanden sind, geht die Anzeige eigentlich recht fix. Ebenfalls höchst ungünstig ist das abbrechen eines Scripts vor dem normalen beenden durch den Browser (innerhalb liste_exif.php). In diesem Falle wird die CSV-Datei unvollständig sein! Repariert sich aber, wenn man dieses Verzeichnis nochmal besucht (oder reload ausführt solange bis das Script normal endet). Zuguterletzt: In der ausgelieferten Version ist $taglist so gesetzt, wie ICH es nutze. In die CSV-Datei wird ZUSÄTZLICH und in jedem Fall geschrieben: Bilddatei;Vorschaubild;FileName;year;month;day;hh;mm;kategorie;stichwort;...$taglist[...]... $taglist kann beliebig angepasst/eingestellt werden. Es werden zurzeit ungefähr folgende DatenFelder ermittelt: AFPointSelected AFPointUsed BytesImageInfo Canon Makernotes Anzahl Werte BytesModeArray Canon Makernotes Anzahl Werte CCDWidth Von php berechneter Wert - Qualität mäßig CompressedBitsPerPixel Contrast Canon: PhotoEffect... DateTimeOriginal Aufnahmezeitpunkt DigitalZoom DigitalZoomRatio DigitalZoomRatio_ Als Faktor DigitalZoomRatio_N DigitalZoomRatio_Z DriveMode EasyShooting ExifImageLength ExifImageWidth ExifVersion ExposureBiasValue Belichtungskorrektur ExposureMode ExposureMode_Canon ExposureTime Belichtungszeit FNumber Blende FileDateTime Dateidatum/zeit FileDateTimeCondensed_ jjjjmmtt-hhmmss FileName FileSize ... KB FirmwareVersion Flash FlashActivity FlashBias FlashDetails Flash_Canon FocalLength Brennweite FocalUnits FocusMode FocusMode_ FocusType Height_ ISO Leider nicht im Auto-Mode ImageDescription ImageRatio_ Verhältnis Breite:Höhe ImageSize KBFocalLength_ Brennweite umgerechnet auf Kleinbildformat LongFocalLength Macro Make MeteringMode MeteringMode_Canon Model OpticalZoomRatio_ Als Faktor Orientation OwnerName PhotoEffect Canon: Farbsättigung, Schärfung, s/w, sepia usw. Quality Saturation SelfTimer SequenceNumber Sharpness ShortFocalLength SubjectDistance Canon A60/A70: in Metern WhiteBalance WhiteBalance_Canon Width_ ZoomRatio_ Insgesamt, also Optischer Zoom * Digitalzoom dof_CCDWidth depth of field: CCD-Breite in mm dof_ZkD depth of field: Zerstreuungskreisdurchmesser in mm dof_Fp depth of field: Scharf bis FERNpunkt Entfernung in m dof_Hf depth of field: Hyperfokale Distanz dof_HfNp depth of field: Hyperfokale Nahdistanz dof_Np depth of field: Scharf ab NAHpunkt Entfernung in m dof_info day month year hh mm Wenn man die "taglist" verändert sollte man alle Dateien neu aufbauen (oder darauf achten, zusätzliche Felder lediglich hinten anzufügen!) 5. Empfohlener Dateibaum für die Bilder: /präfix/jahr/monat/stichwort/*.jpg /präfix ... ist der Pfad bis zum "Wurzelverzeichnis" aller Bild, z.B.: "C:/media/bild/digicam/..." /stichwort ... ist eine Kurzkennzeichnung der Bilder, z.B. "/geburtstag_juergen" oder "/urlaub_kreta" usw. Weitere Tips Einstieg: http://galupki.de/php.html#exif ********************************************************************************************************** bekannte Probleme ================= - Bilder im Hochformat werden nicht autom. gedreht - Datenabfragesuchdatei - Satzlänge beschränkt (Problem insb. bei sehr vielen Kategorien und Stichworten) - Falls man ganze Verzeichnisse z.B. auf CD-R "auslagert", sollte man AUCH das Verzeichnis löschen, damit man sich nicht versehentlich die zugehörige CSV-Directory-Datei löscht (wird ja immer aufgrund des akt. Verzeichnisinhaltes bei einem "Besuch" neu aufgebaut). Das Datenabfragescript wird ganz normal trotz ausgelagerter Bilder weiterfunktionieren (es werden ja nur die schon erstellten CSV-Dateien und Vorschaubilder verwendet). Bilder eines Verzeichnisses nur teilweise auszulagern wird nicht unterstützt! ********************************************************************************************************** History ======= - 2003-09-19 1.03a Abfragescript: Mittels Checkbox kann man auswählen, ob die CSV-Daten zusätzlich zu den Vorschaubildern ausgegeben werden sollen. Es wird geprüft, ob die Bild-Originaldatei jeweils existiert. Falls nicht, wird das Vorschaubild ROT UMRANDET ausgegeben. S.a. "bekannte Probleme, Auslagerung auf CD-R o.ä.". Es werden ganz am Ende Hinweise zu "ausgelagerten" Dateien/Verzeichnissen aufgeführt... - 2003-09-11 1.02a exif taglist ergänzt (Orientation, CompressedBitsPerPixel) Abfragescript: Funktion special_search_fields() in notes.php ermöglicht auch sinnvolle Abfragemöglichkeit problematischer (SEHR viele Werte) Felder, insbesondere ergänzt (SubjectDistance, FileSize, Bilddatei) SubjectDistance: In mehreren Gruppen: <=1m, <=5m, <=10m, >10m, unendlich, ? FileSize: In 100KB-Schritten, z.B. 0.8 MB, 1.0 MB... Bilddatei: Nach "tiefstem" Directorynamen, Beispiel: Ursprünglicher Bilddateien "c:/prv/pic/digicam/2003/09/urlaub_kreta/*.jpg" werden zu "/urlaub_kreta" verdichtet! Abfragescript: Freie Suche in den CSV-Daten nach einer vorgegebenen Zeichenkette möglich Abfragescript: Ausgewählte (markierte) Selektionsbedingungen werden farblich hervorgehoben - 2003-09-04 1.01a Kind hat einen Namen: browser4exif2csv - 2003-09-03 1.0 offizielle Freigabe, alpha-Version