EXIF Daten Speichern
am 29.08.2006 23:45:40 von Steven VarcoHi 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