Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Manipulacje grafiką za pomocą eZ components

Analiza obrazu

Kiedy robisz zdjęcia aparatem cyfrowym, w kodzie plików graficznych gromadzonych jest zaskakująco wiele informacji. Między innymi jest to data wykonania zdjęcia, ustawienia migawki, ogniskowa obiektywu itd. Wyświetlenie tych danych obok zamieszczonych zdjęć może być bardzo przydatne odwiedzającym Twoją stronę. Takie informacje są przechowywane w formacie EXIF i oczywiście mogą być odczytane poprzez eZc.

Przykład skryptu zamieszczonego poniżej przedstawia sposób analizy informacji zawartych w segmencie EXIF poprzez eZc. Użyjemy w tym miejscu klasy ezcImageAnalyzer do stworzenia obiektu $image, który zawiera informacje o zdjęciu.

Czyniąc obraz lepszym

Najpierw powinniśmy zdefiniować obraz, o którym chcemy uzyskać informacje. Następnie sprawdzamy jego typ MIME, ponieważ tylko JPEG i TIFF wspierają zapis danych o obrazie w formacie EXIF.

<?php
// Print image information
$image = new ezcImageAnalyzer( 'boat.jpg' );
 
$mime = $image->mime;
 
// Check if it's a photo format
if ( $mime == 'image/tiff' || $mime == 'image/jpeg' )
{
?>

Czas zrobienia zdjęcia zapisany jest w formacie UNIX timestamp (dokładnie tak, jak to jest z czasem utworzenia pliku czy katalogu), interpretujemy go więc za pomocą funkcji PHP date().

<?php
$date = date( 'd.m.Y', $image->data->date );
?>

Informacje w formacie EXIF są dostępne za pośrednictwem zmiennej $image->data->exif. W naszym przykładzie pobierzemy datę utworzenia zdjęcia, szybkość migawki, długość przesłony i ogniskowej. Prędkość migawki zapisana w postaci ułamkowej części sekundy i tak też zostanie wyświetlona, ponieważ jest to domyślny sposób przedstawiania tej informacji; zapiszemy jej wartość w zmiennej $shutterSpeed. Informacje o przesłonie są podawane w formacie &#8220;F-number&#8221; i przechowywane w zmiennej $aperature. Musimy również odpowiednio przekonwertować dane dotyczące długości ogniskowej (do postaci milimetrów) w celu łatwiejszego odczytu tej informacji. Obliczenia tego typu będą dostępne bezpośrednio z poziomu obiektu w eZc w wersji 1.1. Na końcu oczywiście wyświetlamy wszystkie otrzymane dane zawarte w segmencie EXIF w formacie rozumianym przez zwykłego użytkownika.

Przykładowy kod oraz wynik jego działania
<?php
 
// Load autoloader functionality
require_once 'Base/base.php';
function __autoload( $className )
{
  ezcBase::autoload( $className );
}
 
// Print image information
$image = new ezcImageAnalyzer( 'boat.jpg' );
 
$mime = $image->mime;
 
// Check if it's a photo format
if ( $mime == 'image/tiff' || $mime == 'image/jpeg' )
{
    $date = date( 'd.m.Y', $image->data->date );
 
    // Calculate shutter speed in seconds
    $shutterSpeedArray = split( '/', $image->data->exif['EXIF']['ExposureTime'] );
    $shutterSpeed = "1/" . $shutterSpeedArray[1] / $shutterSpeedArray[0]  . " sec";
 
    $aperatureArray = split( '/', $image->data->exif['EXIF']['FNumber'] );
    $aperature = "F" . round( $aperatureArray[0] / $aperatureArray[1], 1 );
 
    $focalLengthArray = split( "/", $image->data->exif['EXIF']['FocalLength'] );
    $focalLength = round( $focalLengthArray[0] / $focalLengthArray[1], 2 ) . " mm";
 
    // Print information about the photo
    print( "<dl>
             <di>Photo taken on:</di><dd>$date</dd>
             <di>Shutter speed:</di><dd>$shutterSpeed</dd>
             <di>Aperature:</di><dd>$aperature</dd>
             <di>Focal:</di><dd>$focalLength</dd>
            </dl>" );
}
 
?>

Oto obraz użyty w przykładzie wraz z informacjami na jego temat.

Data zrobienia zdjęcia: 24.10.2005 
Szybkość migawki: 1/160 sec 
Przesłona: F5 
Ogniskowa: 50 mm
Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System