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

Manipulacje grafiką za pomocą eZ components

Skalowanie grafiki

Jedną z najczęściej wykonywanych operacji na grafice używanej w sieci jest jej skalowanie. Prawdopodobnie dysponujesz już grafikę w wysokiej rozdzielczości, którą musisz przedstawić w formie miniatur. Powinny one być rozmiarów rzędu np. 150x100 pixeli, przy czym muszą zachować proporcje oryginału.

Przykładowy skrypt napisany w PHP 5.1 pokazuje nam, jak możemy wykorzystać eZc do skalowania grafiki. Konwerter API nazwany ezcImageConverter jest główną klasą odpowiedzialną za konwersje grafiki, skalowanie i nadkładanie różnorakich efektów. Oparty jest on na architekturze pluginu, by dołączanie i przetwarzanie kodu możliwe było jedynie wtedy, kiedy jest on potrzebny - oszczędza to znacznie zużycie pamięci oraz zapewnia rozszerzalność aplikacji.

Autoload na dobry początek

Przyjrzyjmy się teraz bliżej przykładowemu fragmentowi kodu i przeanalizujmy go krok po kroku; na końcu spojrzymy nań ponownie jako całość. Już kilka pierwszych linijek ukaże nam mechanizm autoloadera, pozwalający na automatyczne dołączenie klasy eZc. Więcej informacji na ten temat znajdziesz w artykule wprowadzającym do eZc.

<?php
// Load autoloader functionality
require_once 'Base/base.php';
function __autoload( $className )
{  
    ezcBase::autoload( $className );
}
?>
Wybór biblioteki

W poniższym przykładzie do obsługi naszego kodu użyjemy ImageMagick. Chociaż zarówno ImageMagick jak i GD oferują podobną funkcjonalność, to jednak pierwszy z nich obsługuje więcej formatów plików graficznych. Z drugiej jednak strony, GD jest rozszerzeniem PHP, a ImageMagick jedynie aplikacją wyposażoną i obsługiwaną w oparciu o linię komend, co w większości sytuacji czyni ją wolniejszą.

<?php
// Define which handler to use for the image manipulation.
$settings = new ezcImageConverterSettings(
    array(
        new ezcImageHandlerSettings( 'GD', 'ezcImageGdHandler' ),
        new ezcImageHandlerSettings( 'ImageMagick', 'ezcImageImagemagickHandler' )
        )
    );
?>
Filtry skalowania

Popatrzmy teraz na nasz kod. Mamy już autoloader, powinniśmy więc zdefiniować rodzaj transformacji skalującej, której chcemy użyć. Robimy to w tablicy $scaleFilter, która opisuje różnego rodzaju filtry, jakich użyjemy na danym obrazku. W naszym przypadku zastosujemy jedynie filtr o nazwie scale. Dodatkowo po skalowaniu określimy wymiary obrazka jako parametry tego filtru. Na potrzeby tego przykładu przyjmijmy, że grafika powinna być pomniejszana tylko w sytuacji, gdy jej rzeczywiste rozmiary są większe od ustalonych.

<?php
// Define the filters to apply
$scaleFilters = array(
    new ezcImageFilter(
        'scale',
        array( 'width'    => 500,
               'height'   => 350,
               'direction' => ezcImageGeometryFilters::SCALE_DOWN
               )
        )
    );
?>

Dzięki użyciu stałej ezcImageGeometryFilters::SCALE_DOWN jako głównego parametru, skrypt zadba o to sam. Używając ezcImageGeometryFilters::SCALE_DOWN zwróć uwagę, że jedyną operacją, jaką on wykonuje jest pomniejszanie obrazków. Jeśli chcesz, by obrazki mniejsze od domyślnych były dodatkowo skalowane "w górę" (czyli powiększane), użyj ezcImageGeometryFilter::SCALE_BOTH. Dostępne stałe przedstawione zostały w tabeli:

ezcImageGeometryFilters::SCALE_DOWN

Duże do małych

ezcImageGeometryFilters::SCALE_UP

Małe do dużych

ezcImageGeometryFilters::SCALE_BOTH

Duże do małych, a mniejsze do większych

Wykonanie

Ustawienia związane z naszą transformacją przekazywane są w postaci parametrów metodzie $converter->createTransformation(). Parametr $mimeTypes ogranicza konwersję jedynie do typu JPEG. Następnie naszej transformacji nadajemy nazwę thumbnail, która będzie ją jednoznacznie identyfikować (jest to zmodyfikowana wersja wzorca singleton). Właściwa transformacja wykonywana jest przez metodę $converter->transform(). Tutaj właśnie podajemy nazwę transformacji do wykonania, plik źródłowy, oraz nazwę pliku wyjściowego. Ostatecznie, pod koniec skryptu, za pomocą funkcji PHP print() wyświetlamy naszą miniaturkę.

Przykładowy kod oraz wynik jego działania

Tak przedstawia się właściwie całe działanie kodu, krok po kroku. Po pobraniu go stąd, w środku znajdziesz również komentarze informujące o wykonywanej czynności.

<?php
 
// Load autoloader functionality
require_once 'Base/base.php';
function __autoload( $className )
{  
    ezcBase::autoload( $className );
}
 
// Define which handler to use for the image manipulation.
$settings = new ezcImageConverterSettings(
    array(
       new ezcImageHandlerSettings( 'GD', 'ezcImageGdHandler' ),
        new ezcImageHandlerSettings( 'ImageMagick', 'ezcImageImagemagickHandler' )
        )
    );
 
// Create the converter object.
$converter = new ezcImageConverter( $settings );
 
// Define the filters to apply
$scaleFilters = array(
    new ezcImageFilter(
        'scale',
        array( 'width'    => 500,
               'height'   => 350,
               'direction' => ezcImageGeometryFilters::SCALE_DOWN
               )
        )
    );
 
// Which MIME types the conversion may output
$mimeTypes = array( 'image/jpeg' );
 
// Create the transformation inside the manager, this can be re-used
$converter->createTransformation( 'thumbnail', $scaleFilters, $mimeTypes );
 
// Transform an image.
$converter->transform( 'thumbnail', "boathouse.jpg", "boathouse_tumbnail.jpg" );
 
// Display the image after scaling
print( "<p><img src='boathouse_tumbnail.jpg' /></p>" );
?>

Skrypt wyświetli przeskalowany (pomniejszony) obrazek. Zupełnie, jak ten tutaj.

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-2022 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System