Grafická knihovna PHP (5)
Digitální fotografie obsahují zajímavé EXIF informace, ale jak se k nim dostat?
O tom, že je možné použít programovací jazyk PHP pro úpravy fotografií, jsem už psal v jednom starším článku. Předpokládal jsem, že tím seriál končí, ale nové možnosti tohoto skvělého prostředí mi to asi jen tak nedovolí. Proto je zde článek o programování skriptů, které vypisují zajímavé informace o digitální fotografii. Nevím, jaký používáte fotoeditor, ale já mám v oblíbeném Zoneru PS možnost načíst hodně dat o snímku, která se uvádějí pod názvem EXIF. Při expozici totiž procesor ukládá i další informace o nastavení přístroje, použití blesku, rozměrech snímků, typu fotoaparátu a mnoho dalších.
Jak je ale dostat na webovou stránku? Grafická knihovna PHP obsahuje i tuto možnost, je ale nutné povolit v php.ini knihovny php_mbstring.dll a php_exif.dll. O jejich přítomnosti se přesvědčíte výpisem phpinfo(). V případě, že jsou aktivní, vám už nic nebrání v jejich použití. Pracuje se podobně jako u úpravy fotografie. Potřebujete zdrojový snímek, který data obsahuje. To je sice v pořádku při uložení ve fotoaparátu, ale při další práci v počítači se vám může stát, že tyto informace vypustíte. Proto si zkontrolujte, zda váš snímek EXIF data uložil také.
Informace o fotografii jsou ve webovém výpisu velmi nepřehledné a je nutné uvedeným pojmům trochu rozumět. Musíte vědět, co je doba expozice, citlivost, clona, apod. Jinak jsou samozřejmě tato data k ničemu.
V odkazu pod článkem jsou dvě fotografie. První je focena fotoaparátem Kodak DX7590, druhá mobilním telefonem SE K800i. Moc mě potěšilo, že i fotomobily na EXIF pamatují, i když je zde dat podstatně méně. Chybí zde například ohnisková vzdálenost.
Ukázka zdrojového kódu:
Header("Content-Type: image/jpeg");
/* U obrázku určíme jeho velikost a formát */
$foto = "snimek.jpg";
$velikost = GetImageSize($foto);
$obr = ImageCreateFromJPEG($foto);
/* Nastavíme barvy pro text */
$bila=ImageColorAllocate($obr, 255, 255, 255);
$cerna=ImageColorAllocate($obr, 0, 0, 0);
/* Exif informace o fotografii, expozice, clona, ohnisková vzdálenost a citlivost */
$exif = exif_read_data($foto);
$text = array();
$info = array("ExposureTime", "FNumber", "FocalLength", "ISOSpeedRatings");
foreach ($info as $udaj) {
if (isset($exif[$udaj])) {
$cast = split("/", $exif[$udaj]);
if ($udaj == "ExposureTime") {
$text[] = "Expozice: " . $exif["ExposureTime"] . " sec";}
else
if ($udaj == "FNumber") {
$text[] = "Clona: " . $exif["FNumber"];}
else
if ($udaj == "FocalLength") {
$text[] = "Ohnisko: " . round($cast[0]/$cast[1], 2) . " mm";}
else
if ($udaj == "ISOSpeedRatings") {
$text[] = "Citlivost (ISO): " . $exif["ISOSpeedRatings"];}
}}
ImageString($obr, 3, 5, $velikost[1] - 31, implode("; ", $text), $bila);
/* Konec Exif */
Zobrazení textu je v kódování ISO-8859-1, které nepodporuje české znaky. Nepomůže ani správné nastavení v hlavičce stránky. Pro převod je třeba použít jiné PHP funkce, ale o tom snad bude další pokračování.
>>>>>
11-11-2008