EXIF Daten Speichern

EXIF Daten Speichern

am 29.08.2006 23:45:40 von Steven Varco

Hi php-coder!

Ich möchte mein Gallery-Script so erweitern, dass zu den Bildern auch
die EXIF-Daten gespeichert werden...

Die Bilder werden nach dem raufladen verkleinert, so dass die
EXIF-Daten natürlich verloren gehen. :-(

Diese wieder in das (neue) Bild reinzuschreiben habe ich etwas
rumgetestet, scheint mir aber zu heikel, da das Bild so sehr schnell
korrupt werden kann und dies bei einigen hundert Bildern pro upload
nicht sehr optimal ist.

Nun frage ich mich nach einer externen Speichermöglichkeit für die
EXIF-Daten; folgende Lösungen sehe ich zur Zeit:

1. in die DB speichern:
Da ich aber nicht für jeden Tag ein Feld machen will, müsste man die
ganzen rohdaten in ein Feld schreiben und diese dann beim
rauslesen wieder extrahieren.

Vorteile: Einfach in der Handhabung, da es zu jedem Bild schon einen
record in der DB gibt.

Nachteile: Eine unnormalisierte und aufgeblähte DB, und ich bin nicht
sicher ob man die Daten dann noch sinnvoll extrahieren kann.


2. in seperates textfile (CSV) schreiben:
Da die Bilder in einem Verzeichnis der Form:
/bilder/$GalleryID/$PicID.$ext gespeichert sind könnte ich einfach zu
jedem Bild eine
$PicID.exif Datei anlegen (also z.B. /bilder/$GalleryID/$PicID.exif)
und darin die EXIF-Daten schreiben.

Vorteile: DB bleibt davon unberührt
Nachteile: Im Grunde die selben wie bei Lösung 1; ich weiss nicht, wie
ich diese nacher sinnvoll auslesen kann.

Die Bilder können von den unterschiedlichsten Kammeras kommen, d.h.
auch spezifische Tags enthalten.

Zur Zeit lese ich die Daten nach dem Example Script auf php.net aus:

// Extract EXIF-Data, if available
$exif = exif_read_data($TempFilename, 'IFD0');
if ($exif != false)
{
$exif = exif_read_data($TempFilename, 0, true);
foreach ($exif as $key => $section)
{
foreach ($section as $name => $val)
{
$exif_data .= "$key.$name: $val;";
}
}
}

// Write EXIF Data to Textfile
if ($exif != false)
{
$ExifFile = fopen("$GalleryDir/$ImageID.exif", "w");
flock($ExifFile, 2) or die("Unable to open target file: $newfile");
fputs($ExifFile, $exif_data);
flock($ExifFile, 3);
fclose($ExifFile);
}


Nur, wie kann ich die Daten dann später auslesen und sie in einem
"lesbaren" Format wie z.B:
Kammera: $Camera.Model
Original-Auflösung: $Image.Resoultion
Blitz: Ja/Nein
usw.

darstellen?


Oder bin ich gänzlich auf dem falschen Weg? Wie soll ich die Bilder
speichern, möglichst in einer schleife ohne jedes Tag einzeln
auslesen zu müssen?


Danke schonmal,

Steven

Re: EXIF Daten Speichern

am 30.08.2006 00:40:22 von Niels Braczek

Steven Varco schrieb:

> 1. in die DB speichern:
> Da ich aber nicht für jeden Tag ein Feld machen will,

Doch, das willst du, denn sonst macht das Ganze keinen Sinn.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: EXIF Daten Speichern

am 30.08.2006 03:48:10 von Ralf Zschemisch

Am Tue, 29 Aug 2006 23:45:40 +0200 schrieb Steven Varco:

Hallo,

> Die Bilder werden nach dem raufladen verkleinert, so dass die EXIF-Daten
> natürlich verloren gehen. :-(

Warum natürlich? Mit ImageMagick z.b. behälst du die Exif-Daten
(wenn du dies möchtest)

cu

r23

--
http://www.myoos.de/way/browse.php?id=116

Re: EXIF Daten Speichern

am 30.08.2006 16:06:59 von thborsdorf

Niels Braczek schrieb am 30.08.2006 00:40:
>> 1. in die DB speichern:
>> Da ich aber nicht für jeden Tag ein Feld machen will,
> Doch, das willst du, denn sonst macht das Ganze keinen Sinn.

Ich glaube er will etwas anderes: Pro EXIF-Tag einen Datensatz [1] in
einer separaten Tabelle speichern.

[1] Felder z.B.: ID, ImageID, Tag, Value

> MfG
> Niels

MfG Thomas.

Re: EXIF Daten Speichern

am 30.08.2006 21:22:38 von Steven Varco

"Borsdorf, Thomas" schrieb:

>Ich glaube er will etwas anderes: Pro EXIF-Tag einen Datensatz [1] in
>einer separaten Tabelle speichern.
>
>[1] Felder z.B.: ID, ImageID, Tag, Value

Scheint mir noch der beste Weg zu sein... Probleme könnte ich mir aber
vorstellen, wenn man ein bestimmtes Tag abfragen will, dass
es zu einem bestimmten Bild nicht gibt und dann mySQL reklammieren
würde, schlimmstenfalls mit einer die-Meldung...

Aber ich werds glaube ich mal so machen. Wenns nicht gut läuft brauch
ich nur die Tabelle zu löschen und gut ist. ;-)

greetz,
Steven
--
Die Reue ist eine unvermeidbare Konsequenz des Lebens.
www.varco.ch

Re: EXIF Daten Speichern

am 31.08.2006 20:51:04 von Martin Lemke

Am Tue, 29 Aug 2006 23:45:40 +0200 schrieb Steven Varco:

> 2. in seperates textfile (CSV) schreiben:

Bilder enthalten ganz unterschiedliche EXIF-Datensätze bis hin zu gar
keinen.

Ich würde die einfach in eine Datei schreiben: bilddateiname+'.txt' fertig.
Mit allen anderen Löungen machst Du es unnötig kompliziert und verbaust Dir
künftige Lösungen und Änderungen.

Das Format

exiffeld: wert

kannst Du mit php jederzeit in beliebig andere Formate konvertieren. Z. B.
html-Tabelle u.s.w.

Martin