Die digitale Welt greift weiter um sich. Dabei spielt die digitale Photographie eine große Rolle und immer mehr Nutzer präsentieren ihre Bilder im Netz. Für diese Form gibt es eine ganze Reihe von Lösungen. Immer mehr Software und Kameras unterstützen das EXIF-Format und schreiben eine ganze Reihe von Information in die Bilder.
Nur die wenigsten Möglichkeiten unterstützen das Auslesen und Darstellen der EXIF-Header Daten eines Bildes. Aber gerade beim Präsentieren von Bildern sind diese Information oft sinnvoll und nützlich, ob für die eigenen Zwecke oder um dem geneigten Lesern die Einstellungen der Kamera nahe zu legen und damit eventuell ähnliche Ergebnisse zu erreichen. Verwendung findet diese Funktion im PhotoBlog-Theme, welches ich auch selbst nutze.
PHP stellt seit Version 4.2.0 eine eigene Funktion bereit, die die EXIF-header-Daten auslesen kann. Ich habe die Möglichkeit genutzt und in eine eigene Funktion implementiert. Die Werte der Funktion exif_read_data werden in einem Array abgelegt und entsprechen nicht den üblichen Leseformen von Photographieinteressenten. Dazu muss ein wenig mehr machen. Einziger Nachteil, die Funktion kann lediglich JPG und TIFF auslesen. Will man das im Vorfeld sicher stellen, dann hilft die Funktion exif_imagetype.
Damit man das Rad nicht immer neu erfinden muss, kann die folgende Funktion gerne genutzt werden. Die Funktion liest nicht alle Werte aus – es gibt recht viele, und nicht alle hielt ich für relevant. Damit man aber mal einen Überblick über alle Inhalte bekommen kann, ist der folgende Syntax hilfreich.
$image = '/pfad/bild.jpg';
$exif = exif_read_data($image, 0 , true);
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val
\n";
}
}
function fb_read_write_exif_data($post_ID) {
$image = '/pfad/bild.jpg';
if ($image != '') {
error_reporting(0);
$exif = exif_read_data($image, 0 , true);
if(isset($exif["EXIF"]["DateTimeOriginal"])) {
$fbdateoriginal = str_replace(":","-",substr($exif["EXIF"]["DateTimeOriginal"], 0, 10));
$fbtimeoriginal = substr($exif["EXIF"]["DateTimeOriginal"], 10);
print __('Datum:', 'photoblogfb') . " {$fbdateoriginal}";
print __(' · Uhrzeit:', 'photoblogfb') . " {$fbtimeoriginal}";
print "
\n";
}
if(isset($exif["EXIF"]["FNumber"])) {
list($num, $den) = explode("/",$exif["EXIF"]["FNumber"]);
$fbaperture = "F/" . ($num/$den);
print __('Blende:', 'photoblogfb') . " {$fbaperture}";;
}
if(isset($exif["EXIF"]["ExposureTime"])) {
list($num, $den) = explode("/", $exif["EXIF"]["ExposureTime"]);
if ($num > $den) {
$fbexposure = "{$num}s";
print __(' · Belichtungsdauer:', 'photoblogfb') . " {$fbexposure}";
} else {
$den = round($den/$num);
$fbexposure = "1/{$den}s";
print __(' · Belichtungsdauer:', 'photoblogfb') . " {$fbexposure}";
}
}
if(isset($exif["EXIF"]["FocalLength"])) {
list($num, $den) = explode("/", $exif["EXIF"]["FocalLength"]);
$fbfocallength = ($num/$den) . "mm";
print __(' · Brennweite:', 'photoblogfb') . " {$fbfocallength}";
}
if(isset($exif["EXIF"]["FocalLengthIn35mmFilm"])) {
$fbfbfocallength35 = $exif["EXIF"]["FocalLengthIn35mmFilm"];
print __(', (KB-Format entsprechend:', 'photoblogfb') . " {$fbfbfocallength35}" . __('mm)');
}
print "
\n";
if ( isset($exif["EXIF"]["ISOSpeedRatings"]) ) {
print __('ISO:', 'photoblogfb') . " {$exif["EXIF"]["ISOSpeedRatings"]}";
}
if (isset($exif["EXIF"]["WhiteBalance"]) ) {
switch($exif["EXIF"]["WhiteBalance"]) {
case 0:
$fbwhitebalance = "Auto";
break;
case 1:
$fbwhitebalance = "Daylight";
break;
case 2:
$fbwhitebalance = "Fluorescent";
break;
case 3:
$fbwhitebalance = "Incandescent";
break;
case 4:
$fbwhitebalance = "Flash";
break;
case 9:
$fbwhitebalance = "Fine Weather";
break;
case 10:
$fbwhitebalance = "Cloudy";
break;
case 11:
$fbwhitebalance = "Shade";
break;
default:
$fbwhitebalance = '';
break;
}
print __(' · Weißabgleich:', 'photoblogfb') . " {$fbwhitebalance}";
}
if (isset($exif["EXIF"]["Flash"]) ) {
switch($exif["EXIF"]["Flash"]) {
case 0:
$fbexif_flash = 'Flash did not fire';
break;
case 1:
$fbexif_flash = 'Flash fired';
break;
case 5:
$fbexif_flash = 'Strobe return light not detected';
break;
case 7:
$fbexif_flash = 'Strobe return light detected';
break;
case 9:
$fbexif_flash = 'Flash fired, compulsory flash mode';
break;
case 13:
$fbexif_flash = 'Flash fired, compulsory flash mode, return light not detected';
break;
case 15:
$fbexif_flash = 'Flash fired, compulsory flash mode, return light detected';
break;
case 16:
$fbexif_flash = 'Flash did not fire, compulsory flash mode';
break;
case 24:
$fbexif_flash = 'Flash did not fire, auto mode';
break;
case 25:
$fbexif_flash = 'Flash fired, auto mode';
break;
case 29:
$fbexif_flash = 'Flash fired, auto mode, return light not detected';
break;
case 31:
$fbexif_flash = 'Flash fired, auto mode, return light detected';
break;
case 32:
$fbexif_flash = 'No flash function';
break;
case 65:
$fbexif_flash = 'Flash fired, red-eye reduction mode';
break;
case 69:
$fbexif_flash = 'Flash fired, red-eye reduction mode, return light not detected';
break;
case 71:
$fbexif_flash = 'Flash fired, red-eye reduction mode, return light detected';
break;
case 73:
$fbexif_flash = 'Flash fired, compulsory flash mode, red-eye reduction mode';
break;
case 77:
$fbexif_flash = 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected';
break;
case 79:
$fbexif_flash = 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected';
break;
case 89:
$fbexif_flash = 'Flash fired, auto mode, red-eye reduction mode';
break;
case 93:
$fbexif_flash = 'Flash fired, auto mode, return light not detected, red-eye reduction mode';
break;
case 95:
$fbexif_flash = 'Flash fired, auto mode, return light detected, red-eye reduction mode';
break;
default:
$fbexif_flash = '';
break;
}
print __(' · Blitz:', 'photoblogfb') . " {$fbexif_flash}";
}
/**
if(isset($exif["EXIF"]["Flash"])) {
$fbflash = (bindec($exif["EXIF"]["Flash"]) ? "On" : "Off");
print __(' · Blitz:', 'photoblogfb') . " {$fbflash}";
}
*/
print "
\n";
if(isset($exif["IFD0"]["Make"]) && isset($exif["IFD0"]["Model"])) {
$fbmake = ucwords(strtolower($exif["IFD0"]["Make"]));
$fbmodel = ucwords($exif["IFD0"]["Model"]);
print __('Kamera o. DIA-Scanner:', 'photoblogfb') . " {$fbmake}";
print __(',', 'photoblogfb') . " {$fbmodel}";
}
/* Alle EXIF-Daten untereinander ausgeben */
/**
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val
\n";
}
}
*/
}
}