Exif Viever in Php

tomfire

Grünschnabel
Hallo ich habe folgendes Problem:
Ich möchte die Exif-Daten meiner Fotos über Php auslesen und in eine Datenbank einfügen, damit ich sie unter anderem für meine Fotopage wiederum abrufen kann.
Ich weiß das es solche Programme gibt, doch speziell für meine Nikon Kodak DCS 620 konnte ich noch keine finden.
Wenn ich nun meine Bilddateien, die im Tiff-Format vorliegen einfach mit einer csv oder txt-Endung versehe lassen sich diese ja Zeilenweise auslesen.
nun müsste ich aber hunderte von Zeile dir nur die Bildinformationen beinhalten löschen, oder aber die ca 17 Zeilen die die Exif-Daten beinhalten in eine neue Datei speichern.
Und das ganze sollte auch noch so funktionieren, das es ein Bild nachdem anderen verarbeitet.
Die Bild- bzw. Textdatei ist jedoch im Rohformat schon 1,8Mb groß.
Die Frage wäre kann damit Php überhaupt umgehen bei ca. 100 Bildern?
Viele Fragen ich weiß doch sollte mir doch jemand helfen können, wäre dies super.
Danke Tomfire
 
So ich habe das ganze mal probiert,
hier erstmal mein Code:
PHP:
<?php 
dl("php_exif.dll"); 
dl("php_mbstring.dll");
$exif = exif_read_data('693X8959.tif', 'IFD0'); 
echo $exif===false ? "No header data found.<br />\n" : "";  
$exif = exif_read_data('693X8959.tif', 0, true);  
foreach ($exif as $key => $section) { 
foreach ($section as $name => $val) { 
echo "$name: $val<br />\n"; 
} } 
?>

So bis hierher ist ja alles in Ordnung.
Hier habe ich mal das Resultat für euch kopiert:

FileName: 693X8959.tif
FileDateTime: 1092466906
FileSize: 1875695
SectionsFound: COMPUTED, ANY_TAG, IFD0
Copyright.Photographer: http://www.test.de
Copyright.Editor:
html: width="156" height="104"
Height: 104
Width: 156
IsColor: 1
ApertureFNumber: f/2.6
NewSubFile: 1
ImageWidth: 156
ImageLength: 104
BitsPerSample: 8
Compression: 1
PhotometricInterpretation: 2
ImageDescription:
Make: Kodak
Model: DCS620C
StripOffsets: 41472
Orientation: 9
SamplesPerPixel: 3
RowsPerStrip: 104
StripByteCounts: 48672
MinSampleValue: 0
XResolution: 72/1
YResolution: 72/1
PlanarConfiguration: 1
ResolutionUnit: 1
Software: 2.0.3
DateTime: 2004:08:14 10:01:46
Artist: Tom Oldman
UndefinedTag:0x014A: 1374
UndefinedTag:0x827D: K620C-01069
BatteryLevel: 100/100
UndefinedTag:0x8290: 1582
Copyright: http://www.test.de
ExposureTime: 1/25
FNumber: 0/1
ExposureProgram: 3
UndefinedTag:0x882B: 0
DateTimeOriginal: 2004:08:14 10:01:46
ExposureBiasValue: 0/10
MaxApertureValue: 28/10
MeteringMode: 2
LightSource: 1
FocalLength: 105/1
UndefinedTag:0x9211: 8959
ExposureIndex: 1000/1
UndefinedTag:0x9216: 1
SensingMethod: 2

Doch nun sollen nur einige dieser Daten in eine entsprechende Datenbank geschrieben werden, und da habe ich a) das Problem, ich muss zum Beispiel in der ersten Zeile FileName vom Wert (Bildnummer) trennen.
Und das ebend für einige weitere Zeilen.
Und b) sollen aus einem Ordner ja mehrere Bilder (Bildinformationen) ausgelesen werden.
Ich habe schon viel herumprobiert und in meinen Büchern gelesen, doch ich eigne mir Php nur autodidaktisch an und da stosse ich immer wieder an meine Grenzen.
Gruß Tomfire
 
Also ich bin zwar schon ein Stück weiter,
aber leider noch nicht da wo ich hin will.
Ich habe jetzt 2 Scripte:
Mit dem einen lese ich die Exif-Daten aus dem Bild aus und lasse sie in eine Text-Datei speichern,mit dem anderen lese ich diese Text-Datei wiederum aus, Wähle mir die für mich nötigen Exif-Info's aus und will Sie sie zeilenweise in eine neue Textdatei speichern, die ich dann problemlos mit Mysql auslesen kann.
Folgendes Problem:
Mit diesem Code lese ich einzelne Dateien aus einem Ordner aus.
PHP:
<?php
$verzeichnisname = "probe";
$verzeichnis = opendir($verzeichnisname);
while($image = readdir($verzeichnis))
echo "$image<br>\n";
?>
Doch wie kann ich auf die einzelnen Dateien zugreifen?

Momentan greife ich noch auf die einzelne Datei zu,
doch ich will nacheinander die einzelnen Dateien auslesen und die Werte in eine Textdatei schreiben.
PHP:
<?php
closedir($verzeichnis);
dl("php_exif.dll"); 
dl("php_mbstring.dll");
$exif = exif_read_data('693X8959.tif', 'IFD0'); 
echo $exif===false ? "No header data found.<br/>\n" : "";  
$exif = exif_read_data('693X8959.tif', 0, true);  
foreach ($exif as $key => $section) { 
foreach ($section as $name => $val) { 
echo "$name: $val<br/>\n";
$datei =fopen("test.txt", "a");
if($datei)
{
fputs($datei, "$name: $val\n");
fclose($datei);
}} }
?>

Und nun noch mein 2.Problem:
Will Dieses Daten in eine Zeile einer Textdatei schreiben.
Die Anzeige funktioniert, hier zeigt der Browser mir das ganze in einer Zeile an, getrennt durch Komma.
Doch wenn ich es in eine Textdatei schreiben lassen will, macht er mir hinter jedem Begriff einen Zeilenumbruch.

Hier mal den Code dazu:
PHP:
<?php
$datei = "test.txt"; 
$file = file($datei); 

foreach($file as $element) { 
    foreach(explode(":"." ", $element) as $key => $element2) { 
        if($key == 0) { 
            $desc[] = $element2; 
        } 
        else { 
            $cont[] = $element2; 
        } 
    } 
} 

$key_count = count($desc); 
$value_count = count($cont); 
$keys    = array_values($desc); 
$values  = array_values($cont); 

$daten = array(); 
for ($i = 0; $i < $key_count; $i++) { 
    $daten[$keys[$i]] = $values[$i]; 
} 
echo $daten['FileName'].","; 
echo $daten['Height'].","; 
echo $daten['Width'].",";
echo $daten['ApertureFNumber'].","; 
echo $daten['Copyright'].",";
echo $daten['Artist'].",";
echo $daten['ExposureTime'].",";
echo $daten['DateTimeOriginal'].",";
echo $daten['FocalLength'].",";
echo $daten['ExposureIndex']."<br>";

$datei =fopen("test1.txt", "a");
if($datei)
{
fputs($datei, 
$daten['FileName'].",".
$daten['Height'].",".
$daten['Width'].",".
$daten['ApertureFNumber'].",". 
$daten['Copyright'].",".
$daten['Artist'].",".
$daten['ExposureTime'].",".
$daten['DateTimeOriginal'].",".
$daten['FocalLength'].",".
$daten['ExposureIndex']);
fclose($datei);
}
?>

Ich weiß das sind viele Probleme auf einmal, doch vielleicht kann mir doch jemand helfen.
Ich bringe mir php auch nur autoditaktisch bei und stoße immer wieder an meine Grenzen.
Und ich beötige nun mal ein Script für meine Photos zum auslesen.
Also vielen Dank im voraus hier für jeden Lösungsansatz
Tomfire
 
Zurück