Dr. Baranyai László, fénykép

Dr. Baranyai László

 

Fényképek EXIF adatai PHP programban

márc 5, 18:14, |

 

A fényképeket megosztó fotósok általában meghagyják az eredeti kép EXIF adatait, hogy bemutassák milyen beállításokkal készítették művüket. Ezekből az adatokból a kezdő fotósok ötleteket meríthetnek, de sokszor fény derül a fotós bravúrjára is. A webes programok – fotóblog – kiolvassák ezeket az adatokat és megmutatják. Szerencsére nem bonyolult, így bárki könnyen készíthet ilyen kiegészítést.

PHP program

A PHP nyelvben létezik az exif_read_data() függvény. Az EXIF formátum részletes leírása az MIT honlapján elérhető. A szabványos elnevezések felhasználásával sokféle adat kinyerhető. Az IDF0 és EXIF szekciók tartalmazzák a legfontosabb expozíciós információkat. Az alábbi kód egy tömbbe gyűjti őket:

$exif = array();
$tmp1 = exif_read_data($fname,'IDF0',0);
$tmp2 = exif_read_data($fname,'EXIF',0); 
$exif['camera']   = 'N.A.'; if (array_key_exists('Make', $tmp1)) $exif['camera'] = $tmp1['Make'];
$exif['model']    = 'N.A.'; if (array_key_exists('Model', $tmp1)) $exif['model'] = $tmp1['Model'];
$exif['speed']    = 'N.A.'; if (array_key_exists('ExposureTime', $tmp2)) $exif['speed'] = $tmp2['ExposureTime'];
$exif['fstop']    = 'N.A.'; if (array_key_exists('FNumber', $tmp2)) $exif['fstop'] = $tmp2['FNumber'];
$exif['ISO']      = 'N.A.'; if (array_key_exists('ISOSpeedRatings', $tmp2)) $exif['ISO'] = $tmp2['ISOSpeedRatings'];
$exif['distance'] = 'N.A.'; if (array_key_exists('FocalLength', $tmp2)) $exif['distance'] = $tmp2['FocalLength'];
$exif['time']     = 'N.A.'; if (array_key_exists('DateTimeOriginal', $tmp2)) $exif['time'] = $tmp2['DateTimeOriginal'];

A fenti kód által összeállított adatokból a számok jelentős része u.n. unsigned rational, vagyis egész számok törtjeként jelenik meg (pl. 2900/1000 vagy 10/150). Ennek kezelésére a visszakapott értéket át kell alakítani valós számmá. Az expozíciós idő jellemzően 1 s alatt 1/250 formátumú, míg felette valós szám. Ezt az ellenőrzést a tört számlálója és nevezője összehasonlításával elvégezhetjük.

$tmp = explode('/',$exif['distance']); if (count($tmp)==2) $exif['distance'] = $tmp[0] / $tmp[1];
$tmp = explode('/',$exif['fstop']); if (count($tmp)==2) $exif['fstop'] = $tmp[0] / $tmp[1];
$tmp = explode('/',$exif['speed']); if (count($tmp)==2) {
 if ($tmp[0]>$tmp[1]) $exif['speed'] = $tmp[0] / $tmp[1]; else $exif['speed'] = '1/'. ($tmp[1] / $tmp[0]);
}

A blogba beépítettem egy képnézegető kódot, amely a kiválasztott fényképet önálló oldalon, fotóblog stílusban és EXIF adatokkal mutat meg.

Minta fénykép
Minta fénykép

A közvetlen hivatkozást és idegen oldalról történő képbetöltést nem engedélyeztem benne. Meglévő blog vagy honlap kiegészítéséhez ez elegendő, de aki célzottan fotóblogot szeretne üzemeltetni, ma már inkább szolgáltatásokon keresztül teszi, pl. Flickr vagy 500px.com