29
Wrzesień
poniedziałek, 29 Wrzesień 2008

ImageComponent dla CakePHP

Tworząc jakiś serwis WWW często napotykamy sytuacje, w której np. musimy obsłużyć formularz dodający zdjęcie wysłane przez użytkownika, a następnie dostosować je d onaszych potrzeb. Sytuacje tą znacznie upraszcza opisywany już wcześniej Image Behavior. Niestety oferuje on jedynie skalowanie zdjęć, a co jeśli potrzebujemy np. obrócić zdjęcie lub wkleić znak wodny?

Operacje na funkcjach biblioteki GD2 są nieco męczące, a na niektórych serwerach nawet niedostępne. Dlatego znacznie lepiej użyć biblioteki Asido. Jest ona dostępna dla PHP4 oraz PHP5. Umożliwia ładowanie sterowników, które udostępniają funkcje do obróbki grafiki. Dostępne są GD2, Magick Wand, Image Magick.

Aby użycie tej biblioteki było prostsze i jeszcze krótsze napisałem komponent do Cake’a. Można go pobrać stąd: http://www.reboo.pl/files/download/image_componnent.zip.
Następnie po dodaniu tych plików do projektu wystarczy załadować odpowiedni vendor:

App::import('Vendor', 'resizer');

oraz dołączyć komponent do kontrolera:

var $components = array ('Image');

Teraz można już użyć komponent w nastepujący sposób:

if (!$this->Image->load('example.png', 'result.png'))
{
	//kod błędu
	//........
}
else
{
	$this->Image->rotate(15, $this->Image->color(255, 10, 0));
	$this->Image->save();
}

Metoda Image->rotate() obraca obraz o 15 stopni. Dodatkowo można przekazać kolor, którym zostanie wypełnione tło za obrazkiem. Nalezy do tego użyć metody Image->color(), której kolejne argumenty to składowe RGB.

Dostępne są również funkcje:

  • resize – skalowanie proporcjonalne
  • width – dopasowanie do szerokości
  • height – dopasowanie do wysokości
  • stretch – rozciąganie
  • zoom – dopasowanie do podanych rozmiarów, przez obcięcie wystających boków
  • fit – skalowanie, gdy obrazek “zmieści” się w podanych wymiarach
  • frame – skalowanie z efektem ramki (wypełnienie kolorem, gdy obrazek się nie mieści)
  • convert – zmiana formatu
  • watermark – znak wodny
  • grayscale – zmiana kolorów do odcieni szarości
  • rotate – rotacja
  • copy – kopiowanie podanego obrazu do załadowanego
  • crop – kadrowanie
  • flip – odbicie w pionie
  • flop – odbicie w poziomie
  • save – zapisanie obrazka
  • image – załadowanie obrazu
  • load – również załadowanie obrazu, opisane poniżej

Dodatkowo mamy również dostęp do pól:

  • width – szerokość załadowanego obrazka
  • height – wysokość obrazka

Biblioteka Asido niestety w obecnej fazie rozwoju w małym stopniu obsługuje występowanie błędów. Autor zapewnia, że to poprawi. Żeby jednak nieco uprościć ładowanie obrazków, wprowadziłem funkcję load, która zwraca true jeżeli plik istnieje i false w przeciwnym wypadku. Wkrótce postaram się wprowadzić jeszcze nieco więcej usprawnień.

Dla tych którzy zastanawiają się po co używać biblioteki Asido jako komponent zamiast tworzyć zwykły obiekt tej klasy?

Po pierwsze komponentów nie trzeba tworzyć, po dołączeniu są dostępne np. jako $this->Image.
Po drugie nie trzeba pamiętać, żeby do każdej funkcji operującej na obrazie przekazywać obiekt Asido::Image ponieważ jest on przechowywany w samym obiekcie.

poniedziałek, 29 Wrzesień 2008 
Kategoria: CakePHP
Możesz śledzić ten wpis przez RSS 2.0 lub dodać komentarz.
Zostaw komentarz

Home Home O mnie O mnie Efekty
JavaScript, jQuery, AJAX
Efekty
Inspiracje
Ciekawe strony WWW
Inspiracje
Programowanie
CakePHP, PHP, MySQL
Programowanie
SEO
Wyszukiwarki
SEO
Web Building
HTML i CSS
Web Building
Projekty Linki Kontakt Kontakt