class5 , czyli co potrafi GD
Ostatnio , zupełnie przez przypadek trafiłem na dosyć projekt, o którym początkowo pisać nie chciałem. Mowa o class5.
Czym ów twór jest? Pozwolę sobie zacytować fragment dokumentacji:
“Jest to zbiór klas przeznaczonych dla skryptowego języka programowania PHP służącego do tworzenia stron internetowych, wykonywanych po stronie serwera. ”
Pominę tutaj okrojenie zastosowań PHP (który może służyć do naprawdę wielu rzeczy - kiedyś do tematu jeszcze wrócę).
“Ponieważ zbiór bibliotek wykorzystuje całkowicie nowy model programowania obiektowego dostępny w PHP 5, który jest nie jest zarazem w pełni kompatybilny z poprzednimi wersjami PHP, wymaga do poprawnego działania piątej edycji tego języka.”
Tutaj chciałem dodać tylko jedną rzecz - ów “nowy model programowania obiektowego” to znany od baaardzo dawna model na przykład z C++. Choć wciąż mocno okrojony. Ale o tym , czego jeśli chodzi o obiektowość brakuje PHP jeszcze kiedyś napiszę - jest o czym ;).
Wracając do meritum - class5 . Jest to zbiór następujących klas:
-
Class5.Babel - internacjonalizacja i18n / gettext
-
Class5.BBCode - parser BBCcode
-
Class5.Chameleon - system szablonów TPL
-
Class5.Debugger - klasa debuggująca
-
Class5.Expose - highlihter kodów źródłowych
-
Class5.FileMagick - zarządzanie metadanymi plików i katalogów
-
Class5.Former - generator formularzy
-
Class5.Garden - silnik obsługi drzew
-
Class5.Geo - geolokalizacja adresów IP
-
Class5.Mailer - system pocztowy
-
Class5.Mnemonic - mechanizm cache
-
Class5.Picasso - system zarządzania obrazami
-
Class5.Reactor - generator feedow RSS / Atom
-
Class5.Scout - parser zmiennych USER_AGENT / REFERER
-
Class5.Storage - silnik baz danych
i… tyle wiadomo na ich temat. Wszystko inne co można powiedzieć opiera się na dokumentacji oraz plikach testowych umieszczonych na stronie autora. Nie mogę więc powiedzieć niczego na temat wydajności, lub jakości kodu. Tak więc nie mogę powiedzieć niczego co jest naprawdę ważne. To pierwszy powód dla którego nie chciałem pisać o tej klasie. Jaki jest drugi? Na podstawie dokumentacji oraz testów odnoszę wrażenie, że te wszystkie klasy to w wiekszości realizowanie prostych funkcji, które równie prosto możemy osiągnąć bez zewnętrznych klas. Oczywiście nie twierdzę , że tak być nie może. Ale klasa z dwoma metodami:
-
public function parseUserAgent()
-
public function parseReferer()
(oraz trzecią, wyświetlającą wersje klasy) gdzie jedyną fukncjonalnością całej klasy to parsowanie HTTP_USER_AGENT oraz HTTP_REFERER . Całe szczęście są też ciekawsze klasy - jak na przykład Class5.Picasso. I to właśnie o niej będzię reszta wpisu.
Ale nie dlatego, że klasa jest inowacyjna (podobne klasy znajdziecie tutaj), lub wyjątkowo wydajna (wciąż nie została nigdzie udostępniona). Klasa ta (a raczej przykłady przedstawione przez autora) pokazują, jakie możliwości ma biblioteka GD (którą można stosować nie tylko w PHP - została ona napisana w C). I właśnie po to powstał ten wpis.
Jeśli chodzi o PHP to większość osób od jakiegoś czasu stosuje alternatywę - imagemagick . Przyznam, że dawno nie robiłem testów i nie wiem jak obecnie wygląda kwestia wydajności. Prawdopodobnie niewiele się zmieniło i IM wciąż jest o wiele szybszy od GD. Jednak do niektórych zastosowań GD jest na pewno wystarczające. Dodatkowo występuje kwestia dostępności imagemagick’a. Czy warto szukać serwera z IM? A może starczy GD? Oceńcie sami.
- Dodawanie obramowania oraz cienia [cień jest niewidoczny ze wzgledu na czarny kolor tła blogu. Kliknij aby otworzyć obrazek w nowym oknie]

- Obramowanie oraz filtry [klik]

- Odbicie obrazu

- Czcionki truetype + cieniowanie obsługa antyaliasingu.

- Pozycjonowanie tekstu oraz marginesy

- Wtapianie, przeźrocza, efekt refleksu

- Generowanie przycisków

- Oraz coś , co naprawdę mi się podoba - ładna ramka


- Oczywiście ów ramka to nie wytwór GD czy samej klasy po prostu pliczek z ramką - proste, ale naprawdę bardzo ładne - brawa dla autora.

Oczywiście to tylko przykłady bez kodu - ten możecie znaleźć na stronie autora. Gdy autor udostępni pliki klasy, napiszę coś więcej.