Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00430 003486 12430973 na godz. na dobę w sumie
PHP 5. Praktyczny kurs. Wydanie II - książka
PHP 5. Praktyczny kurs. Wydanie II - książka
Autor: Liczba stron: 456
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-3393-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Rewelacyjne strony internetowe w PHP 5 - dowiedz się, jak je zrobić!

Znajomość języka skryptowego PHP, szczególnie w wersji PHP 5, to w dzisiejszych czasach standard, bez którego nie może się obyć żaden szanujący się twórca stron internetowych. Środowisko PHP 5 pozwala tworzyć dynamiczne witryny, efektywnie komunikujące się z bazami danych. Zapewnia też możliwość współpracy Twojej strony z różnymi rodzajami danych, a ponadto nadaje się do tworzenia samodzielnie działających aplikacji. Jeśli marzy Ci się kariera webmastera, a nie masz jeszcze odpowiednich umiejętności w tej dziedzinie lub chcesz odświeżyć wiedzę, ta książka umożliwi Ci szybkie wejście na grunt praktycznego zastosowania możliwości języka PHP w Twoich własnych projektach.

W podręczniku 'PHP 5. Praktyczny kurs. Wydanie II' znajdziesz kompletne informacje o podstawach PHP - od kwestii związanych z nazewnictwem, instalacją i konfiguracją niezbędnych narzędzi, przez omówienie zasad budowy skryptów, aż po programowanie obiektowe i obsługę sieci. Dowiesz się, jak uruchomić działającą (i atrakcyjną) witrynę internetową, jak wykorzystać możliwości grafiki i o czym należy pamiętać, aby uniknąć kłopotów z wyświetlaniem witryny w przeglądarce. Nauczysz się obsługiwać protokoły sieciowe i zrozumiesz, na czym polega obsługa sesji. Sprawdź, jak wiele możesz osiągnąć, programując w PHP!

PHP 5 - po prostu musisz to znać!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Idź do • Spis treści • Przykładowy rozdział • Skorowidz Katalog książek • Katalog online • Zamów drukowany katalog Twój koszyk • Dodaj do koszyka Cennik i informacje • Zamów informacje o nowościach • Zamów cennik Czytelnia • Fragmenty książek online Kontakt Helion SA ul. Kościuszki 1c 44-100 Gliwice tel. 32 230 98 63 e-mail: helion@helion.pl © Helion 1991–2011 PHP 5. Praktyczny kurs. Wydanie II Autor: Marcin Lis ISBN: 978-83-246-3393-7 Format: 158×235, stron: 456 Rewelacyjne strony internetowe w PHP 5 – dowiedz się, jak je zrobić! • Instalacja i konfiguracja narzędzi, czyli bez czego nie da się ruszyć dalej • Elementy języka i współpraca z systemem plików, czyli co koniecznie trzeba opanować • Obiektowy PHP i współpraca z bazami danych, czyli co może Ci się przydać Znajomość języka skryptowego PHP, szczególnie w wersji PHP 5, to w dzisiejszych czasach standard, bez którego nie może się obyć żaden szanujący się twórca stron internetowych. Środowisko PHP 5 pozwala tworzyć dynamiczne witryny, efektywnie komunikujące się z bazami danych. Zapewnia też możliwość współpracy Twojej strony z różnymi rodzajami danych, a ponadto nadaje się do tworzenia samodzielnie działających aplikacji. Jeśli marzy Ci się kariera webmastera, a nie masz jeszcze odpowiednich umiejętności w tej dziedzinie lub chcesz odświeżyć wiedzę, ta książka umożliwi Ci szybkie wejście na grunt praktycznego zastosowania możliwości języka PHP w Twoich własnych projektach. W podręczniku „PHP 5. Praktyczny kurs. Wydanie II” znajdziesz kompletne informacje o podstawach PHP – od kwestii związanych z nazewnictwem, instalacją i konfiguracją niezbędnych narzędzi, przez omówienie zasad budowy skryptów, aż po programowanie obiektowe i obsługę sieci. Dowiesz się, jak uruchomić działającą (i atrakcyjną) witrynę internetową, jak wykorzystać możliwości grafiki i o czym należy pamiętać, aby uniknąć kłopotów z wyświetlaniem witryny w przeglądarce. Nauczysz się obsługiwać protokoły sieciowe i zrozumiesz, na czym polega obsługa sesji. Sprawdź, jak wiele możesz osiągnąć, programując w PHP! • Instalacja i konfiguracja narzędzi • Pierwszy skrypt • Zmienne, typy danych i operatory • Instrukcje sterujące i funkcje • Obsługa daty i czasu, ciągi znaków, tablice • Operacje na strukturze systemu plików • Operacje na plikach i praktyczne wykorzystanie plików • Odbieranie danych z przeglądarki • Wysyłanie danych do przeglądarki • Obsługa cookies, sesje i wyjątki • Programowanie obiektowe • Obsługa grafiki • Połączenia sieciowe, poczta i FTP • PHP i popularne bazy danych • Obiektowa współpraca z MySQL i SQLite • Bazy danych w praktyce PHP 5 – po prostu musisz to znać! Rozdziaä 0. Spis treĈci Wstöp .............................................................................................. 7 Rozdziaä 1. Podstawy ....................................................................................... 11 Lekcja 1. Czym jest PHP? .............................................................................................. 11 JĊzyk skryptowy ....................................................................................................... 11 Krótka historia PHP ................................................................................................. 12 Jak to dziaáa? ............................................................................................................ 12 Lekcja 2. Instalacja i konfiguracja narzĊdzi .................................................................... 14 Samodzielna instalacja narzĊdzi ............................................................................... 14 Korzystanie z pakietu XAMPP ................................................................................. 31 Plik konfiguracyjny PHP .......................................................................................... 38 PHP w wierszu poleceĔ ............................................................................................ 39 Rozdziaä 2. Elementy jözyka ............................................................................. 41 Lekcja 3. Pierwszy skrypt ............................................................................................... 41 Zaczynamy ............................................................................................................... 41 Znaczniki PHP ......................................................................................................... 45 Komentarze .............................................................................................................. 47 WyĞwietlanie informacji .......................................................................................... 49 Instrukcja print ......................................................................................................... 50 àączenie skryptów .................................................................................................... 51 Lekcja 4. Zmienne, typy danych i operatory .................................................................. 57 Czym są zmienne? .................................................................................................... 57 Rodzaje zmiennych, czyli typy danych .................................................................... 58 Zmienne w kodzie skryptu ....................................................................................... 62 WyĞwietlanie wartoĞci zmiennych ........................................................................... 64 Operacje na zmiennych ............................................................................................ 68 Operatory ................................................................................................................. 68 Zmienne globalne (superglobalne) ........................................................................... 83 Konwersje typów ...................................................................................................... 85 ûwiczenia do samodzielnego wykonania ................................................................. 89 Lekcja 5. Instrukcje sterujące ......................................................................................... 90 Instrukcje warunkowe .............................................................................................. 90 Instrukcja wyboru ..................................................................................................... 97 Operator warunkowy ................................................................................................ 99 PĊtle ........................................................................................................................ 100 Skáadnia alternatywna ............................................................................................ 111 ûwiczenia do samodzielnego wykonania ............................................................... 113 4 PHP5. Praktyczny kurs Lekcja 6. Funkcje ......................................................................................................... 114 Definiowanie funkcji .............................................................................................. 114 Argumenty funkcji ................................................................................................. 115 Zwracanie wartoĞci przez funkcje .......................................................................... 117 ZasiĊg zmiennych ................................................................................................... 118 Sposoby przekazywania argumentów ..................................................................... 123 DomyĞlne argumenty funkcji ................................................................................. 125 ûwiczenia do samodzielnego wykonania ............................................................... 126 Lekcja 7. Obsáuga daty i czasu ..................................................................................... 127 WyĞwietlanie daty i czasu ...................................................................................... 127 Tworzenie znacznika czasu .................................................................................... 135 Pozostaáe funkcje .................................................................................................... 138 ûwiczenia do samodzielnego wykonania ............................................................... 141 Lekcja 8. Ciągi znaków ................................................................................................ 141 Rodzaje ciągów znaków ......................................................................................... 141 WyraĪenia záoĪone w ciągach znaków ................................................................... 143 Która metoda jest szybsza? .................................................................................... 144 Formatowanie ciągów ............................................................................................ 146 Przetwarzanie ciągów znaków ............................................................................... 152 Porównania ............................................................................................................. 154 Przeszukiwanie ....................................................................................................... 155 ûwiczenia do samodzielnego wykonania ............................................................... 157 Lekcja 9. Tablice .......................................................................................................... 158 Proste tablice .......................................................................................................... 158 Tablice asocjacyjne ................................................................................................ 161 Operacje na tablicach ............................................................................................. 163 ûwiczenia do samodzielnego wykonania ............................................................... 170 Rozdziaä 3. Wspóäpraca z systemem plików .................................................... 171 Lekcja 10. Operacje na strukturze systemu plików ...................................................... 171 Odczyt zawartoĞci katalogu .................................................................................... 171 Operacje na katalogach .......................................................................................... 176 Operacje na plikach ................................................................................................ 178 Miejsce na dysku .................................................................................................... 180 Rekurencyjne usuwanie zawartoĞci katalogu ......................................................... 182 Nawigacja po katalogach ........................................................................................ 182 ûwiczenia do samodzielnego wykonania ............................................................... 185 Lekcja 11. Operacje na plikach ..................................................................................... 186 Tworzenie i otwieranie plików ............................................................................... 186 Zamykanie plików .................................................................................................. 188 Odczyt danych ........................................................................................................ 188 Zapis danych .......................................................................................................... 195 Inne operacje .......................................................................................................... 201 ûwiczenia do samodzielnego wykonania ............................................................... 204 Lekcja 12. Praktyczne wykorzystanie plików ............................................................... 204 Tekstowy licznik odwiedzin ................................................................................... 205 Licznik wykorzystujący grafikĊ ............................................................................. 207 Lista odnoĞników ................................................................................................... 209 Lista odwiedzin ...................................................................................................... 210 ûwiczenia do samodzielnego wykonania ............................................................... 213 Spis treĈci 5 Rozdziaä 4. Wspóäpraca z przeglñdarkñ ........................................................... 215 Lekcja 13. Odbieranie danych z przeglądarki ............................................................... 215 Formularze HTML ................................................................................................. 215 Wysyáanie metodą GET ......................................................................................... 216 Metoda POST ......................................................................................................... 221 Wysyáanie plików do serwera ................................................................................ 223 ûwiczenia do samodzielnego wykonania ............................................................... 227 Lekcja 14. Wysyáanie danych do przeglądarki ............................................................. 228 Sposoby wysyáania danych .................................................................................... 228 Wysyáanie zawartoĞci plików ................................................................................. 228 Sposoby pobierania plików z serwisu .................................................................... 232 ûwiczenia do samodzielnego wykonania ............................................................... 245 Lekcja 15. Obsáuga cookies .......................................................................................... 245 Krótko o cookies .................................................................................................... 245 Obsáuga cookies w PHP ......................................................................................... 246 Korzystanie z cookies ............................................................................................. 250 ûwiczenia do samodzielnego wykonania ............................................................... 255 Lekcja 16. Sesje ............................................................................................................ 255 WstĊp do sesji ........................................................................................................ 255 Identyfikator sesji ................................................................................................... 256 Rozpoczynanie sesji ............................................................................................... 256 KoĔczenie sesji ....................................................................................................... 257 Zmienne sesji ......................................................................................................... 257 Konfiguracja sesji ................................................................................................... 258 Implementacja sesji ................................................................................................ 260 ĝledzenie zachowaĔ uĪytkownika .......................................................................... 264 Kontrola dostĊpu z wykorzystaniem sesji .............................................................. 266 System logowania z danymi w pliku ...................................................................... 271 ûwiczenia do samodzielnego wykonania ............................................................... 274 Rozdziaä 5. Obiektowy PHP ............................................................................ 275 Lekcja 17. Podstawy obiektowoĞci ............................................................................... 275 Czym jest obiekt? ................................................................................................... 275 Definicja klasy ....................................................................................................... 276 Tworzenie obiektów ............................................................................................... 279 Konstruktory i destruktory ..................................................................................... 281 Automatyczne áadowanie kodu klasy ..................................................................... 284 Obiektowa lista odwiedzin ..................................................................................... 286 ûwiczenia do samodzielnego wykonania ............................................................... 288 Lekcja 18. WiĊcej o programowaniu obiektowym ....................................................... 288 Dziedziczenie ......................................................................................................... 288 Przesáanianie skáadowych ....................................................................................... 292 Klasy i skáadowe finalne ........................................................................................ 294 Konstruktory i destruktory klas bazowych ............................................................. 295 Specyfikatory dostĊpu ............................................................................................ 297 Skáadowe statyczne ................................................................................................ 299 ûwiczenia do samodzielnego wykonania ............................................................... 302 Lekcja 19. Wyjątki ....................................................................................................... 303 Instrukcja throw ..................................................................................................... 303 Klasa Exception i pochodne ................................................................................... 304 Blok try...catch ....................................................................................................... 305 Przechwytywanie wielu wyjątków ......................................................................... 310 Wáasne wyjątki ....................................................................................................... 313 ûwiczenia do samodzielnego wykonania ............................................................... 314 6 PHP5. Praktyczny kurs Rozdziaä 6. Grafika i obrazy ............................................................................ 315 Lekcja 20. Obsáuga grafiki ........................................................................................... 315 Biblioteka graficzna ............................................................................................... 315 Jak stworzyü galeriĊ obrazów? ............................................................................... 316 Przetwarzanie grafiki .............................................................................................. 325 ûwiczenia do samodzielnego wykonania ............................................................... 337 Rozdziaä 7. Obsäuga sieci ............................................................................... 339 Lekcja 21. Poáączenia, poczta i FTP ............................................................................. 339 Tablica $_SERVER ................................................................................................ 339 Adresy IP ................................................................................................................ 342 Jak rozpoznaü przeglądarkĊ? .................................................................................. 345 Poáączenie FTP ....................................................................................................... 347 Wysyáanie poczty ................................................................................................... 349 ûwiczenia do samodzielnego wykonania ............................................................... 352 Rozdziaä 8. Wspóäpraca z bazami danych ........................................................ 353 Lekcja 22. Podstawy baz danych .................................................................................. 353 MySQL i SQLite .................................................................................................... 353 Tabele, klucze i relacje ........................................................................................... 354 Bazy danych a PHP ................................................................................................ 358 Instalacja systemu bazy danych .............................................................................. 359 Obsáuga serwera MySQL ....................................................................................... 365 Lekcja 23. Podstawy SQL ............................................................................................ 371 Czym jest SQL? ..................................................................................................... 371 Obsáuga tabel .......................................................................................................... 372 Typy danych w kolumnach .................................................................................... 377 Zapytania ................................................................................................................ 382 Lekcja 24. PHP i bazy danych ...................................................................................... 394 PHP i MySQL ........................................................................................................ 394 PHP i SQLite .......................................................................................................... 402 ûwiczenia do samodzielnego wykonania ............................................................... 409 Lekcja 25. PodejĞcie obiektowe .................................................................................... 410 Korzystanie z PDO ................................................................................................. 410 PHP i SQLite .......................................................................................................... 418 Lekcja 26. Bazy danych w praktyce ............................................................................. 423 Licznik ................................................................................................................... 423 Logowanie .............................................................................................................. 426 Ankieta ................................................................................................................... 428 Lista odwiedzin ...................................................................................................... 433 Liczba osób na stronie ............................................................................................ 435 ûwiczenia do samodzielnego wykonania ............................................................... 437 Skorowidz .................................................................................... 439 Rozdziaä 6. Grafika i obrazy Lekcja 20. Obsäuga grafiki Biblioteka graficzna PHP umoĪliwia zarówno wykonywanie róĪnorodnych operacji na obrazach, jak i ge- nerowanie plików graficznych. Wraz z PHP jest w tym celu dostarczana standardowo biblioteka GD1 (dostĊpna równieĪ pod adresem http://www.libgd.org/ lub http://www. boutell.com/gd/). W przypadku systemu Windows uaktywnienie funkcji graficznych uzyskamy przez usuniĊcie komentarza (początkowego Ğrednika) z wiersza: extension=php_gd2.dll znajdującego siĊ w pliku php.ini (oczywiĞcie o ile ten wiersz jest ujĊty w komentarz — poprzedzony Ğrednikiem). W przypadku Linuksa w pakietach dla poszczególnych dystrybucji biblioteka GD jest zwykle doáączana standardowo i nie trzeba wykonywaü dodatkowych czynnoĞci. Aby wáączyü obsáugĊ biblioteki GD w przypadku samodzielnej kompilacji pakietów PHP, naleĪy podczas konfiguracji podaü dodatkową opcjĊ: --with-gd jeĞli chcemy korzystaü z biblioteki dostarczonej wraz z PHP lub: --with-gd=nazwa_katalogu jeĞli chcemy korzystaü z zewnĊtrznej wersji biblioteki, np. pobranej spod podanego wyĪej adresu. W tym przypadku parametr nazwa_katalogu powinien wskazywaü kata- log, w którym ta biblioteka zostaáa zainstalowana. 1 Jako rozszerzenia dostĊpne są teĪ inne biblioteki, np. ImageMagic, Gmagick, Cairo. Dokáadne informacje o nich moĪna znaleĨü w dokumentacji PHP. 316 PHP5. Praktyczny kurs W celu przekonania siĊ, czy dana wersja PHP ma wáączoną obsáugĊ biblioteki GD, moĪ- na uĪyü funkcji o nazwie gd_info. Zwraca ona tablicĊ asocjacyjną zawierającą infor- macje o konfiguracji. Wystarczy zatem wywoáaü skrypt przedstawiony na listingu 6.1. Listing 6.1. Informacje o zainstalowanej bibliotece graficznej ?php $arr = gd_info(); foreach($arr as $key = $val){ echo $key = $val\n ; } ? Przykáadowy efekt dziaáania kodu w konsoli systemu Windows zostaá zaprezentowany na rysunku 6.1 (skrypt moĪna teĪ wywoáaü w przeglądarce, dodając jednak dla forma- towania znacznik br / ). W sytuacji gdy wykonanie skryptu nie spowoduje wyĞwie- tlania informacji lub teĪ pojawi siĊ komunikat o nieznanej funkcji gd_info, bĊdzie to oznaczaü, Īe obsáuga biblioteki GD nie zostaáa wáączona. Rysunek 6.1. Informacje o wersji i opcjach biblioteki graficznej GD Jak stworzyè galeriö obrazów? Zanim przejdziemy do procedur przetwarzających grafikĊ, spróbujmy zająü siĊ bar- dzo popularnym tematem tworzenia galerii obrazów. W wiĊkszoĞci wypadków nie wy- maga to wykorzystywania funkcji udostĊpnianych przez bibliotekĊ GD — wystarczą zdobyte do tej pory wiadomoĞci dotyczące jĊzyka PHP, w tym wspóápracy z przeglą- darką (lekcje z rozdziaáu 4.) oraz systemem plików (lekcje z rozdziaáu 3.). Stwórzmy wiĊc kilka przykáadowych galerii. Prosta galeria Najprostsza galeria wyĞwietla pojedyncze obrazy wraz z odnoĞnikami nawigacyjnymi, tak jak zostaáo to zaprezentowane na rysunku 6.2. Jej utworzenie nie powinno spra- wiü Īadnego káopotu. Pliki z obrazami zapiszemy w osobnym katalogu, np. o nazwie images. Skrypt oczywiĞcie uwzglĊdni automatycznie wszelkie zmiany zawartoĞci tego katalogu, nie trzeba wiĊc bĊdzie troszczyü siĊ o rĊczną aktualizacjĊ danych. Aby jed- nak nie komplikowaü kodu skryptu, przyjĊte zostanie zaáoĪenie, Īe katalog nie moĪe Rozdziaä 6. i Grafika i obrazy 317 Rysunek 6.2. Przykáadowy wygląd galerii zawieraü innych plików niĪ pliki galerii ani podkatalogów. BĊdzie siĊ w nim teĪ mu- siaá znajdowaü co najmniej jeden plik graficzny. Numer wyĞwietlanego obrazu bĊdzie przekazywany do skryptu za pomocą metody GET w postaci parametru o nazwie imgid. Obrazy bĊdą wyĞwietlane w kolejnoĞci alfabetycz- nej (wedáug nazw plików), pierwszy z nich bĊdzie miaá identyfikator 0, drugi — 1 itd. Na kaĪdej stronie galerii, tak jak jest to widoczne na rysunku 6.2, bĊdą wyĞwietlane:  obraz (umieszczany na stronie za pomocą znacznika img ),  nazwa pliku graficznego,  numer obrazu (numeracja bĊdzie siĊ rozpoczynaü od 1),  caákowita liczba obrazów,  odnoĞniki do pierwszego, poprzedniego, nastĊpnego i ostatniego obrazu. Skrypt generujący tak okreĞloną galeriĊ zostaá przedstawiony na listingu 6.2. Przyj- rzyjmy siĊ mu bliĪej. Listing 6.2. Prosta galeria obrazów !DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01//EN html head meta http-equiv= Content-Type content= text/html; charset=iso-8859-2 title Galeria obrazów /title 318 PHP5. Praktyczny kurs /head body ?php $imgDir = ./images ; //odczytanie parametru if(isSet($_GET[ imgid ])){ $imgId = $_GET[ imgid ]; } else{ $imgId = 0; } //odczytanie zawartoĞci katalogu $dir = scandir($imgDir); array_shift($dir); array_shift($dir); $count = count($dir); //sprawdzenie poprawnoĞci parametru if($imgId 0 || $imgId = $count || !is_Numeric($imgId)){ $imgId = 0; } //ustalenie nazwy bieĪącego obrazu oraz //identyfikatorów obrazów dla odnoĞników $imgName = $dir[ $imgId ]; $first = 0; $last = $count - 1; if($imgId $count - 1){ $next = $imgId + 1; } else{ $next = $count - 1; } if($imgId 0){ $prev = $imgId - 1; } else{ $prev = 0; } ? div div id= obraz style= text-align:center ?php echo img src=\ $imgDir/$imgName\ alt=\ $imgName\ / ; ? /div div id= opis style= text-align:center ?php $imgId++; echo Obraz $imgName ($imgId z $count) ; ? /div div id= nawigacja style= text-align:center Rozdziaä 6. i Grafika i obrazy 319 ?php echo a href=\ galeria.php?imgid=$first\ Pierwszy /a ; echo a href=\ galeria.php?imgid=$prev\ Poprzedni /a ; echo a href=\ galeria.php?imgid=$next\ Nastúpny /a ; echo a href=\ galeria.php?imgid=$last\ Ostatni /a ; ? /div /div /body /html Kod rozpoczyna siĊ od ustawienia zmiennej $imgDir wskazującej katalog, w którym bĊdą umieszczane obrazy (musi to byü katalog dostĊpny przez serwer WWW). W tym przypadku jest to podkatalog images katalogu, w którym bĊdzie umieszczony skrypt galeria.php. NastĊpnie za pomocą instrukcji warunkowej if sprawdzane jest, czy do skryptu zostaá przekazany parametr imgid, czyli czy w tablicy $_GET jest klucz o nazwie imgid. JeĞli tak, jego wartoĞü jest odczytywana, konwertowana za pomocą funkcji intval do typu integer (por. lekcja 4. z rozdziaáu 2.) i przypisywana zmiennej $imgId, w przeciwnym razie wartoĞü zmiennej $imgId jest ustawiana na 0. Po wykonaniu tych wstĊpnych czynnoĞci za pomocą funkcji scandir odczytywana jest zawartoĞü katalogu wskazywanego przez $imgDir i przypisywana zmiennej $dir. Jak wiadomo z lekcji 10. (rozdziaá 3.), wynikiem dziaáania scandir jest tablica zawierająca wszystkie elementy wskazanego katalogu (dlatego teĪ powinny siĊ w nim znajdowaü wyáącznie pliki graficzne galerii) posortowane w kolejnoĞci alfabetycznej. Pierwsze dwa elementy tej tablicy to wskazanie do katalogu bieĪącego (.) oraz nadrzĊdnego (..)2, dlatego teĪ są one usuwane za pomocą dwóch wywoáaĔ funkcji array_shift (funkcja array_shift usuwa z tablicy pierwszą komórkĊ, czyli pierwszy indeks). NastĊpnie za pomocą wywoáania funkcji count pobierana jest i zapisywana w zmien- nej $count caákowita liczba obrazów, a za pomocą instrukcji if nastĊpuje sprawdzenie poprawnoĞci parametru zapisanego w zmiennej $imgId. Nie moĪna bowiem zakáadaü, Īe do skryptu zostaáa przekazana na pewno poprawna wartoĞü. Dlatego teĪ jest spraw- dzane, czy wartoĞü $imgId jest:  mniejsza od 0,  wiĊksza od maksymalnej moĪliwej wartoĞci ($count - 1), JeĞli jeden z tych warunków jest prawdziwy (czyli kiedy zostanie stwierdzona niepra- widáowoĞü przekazanych danych), zmiennej $imgId jest przypisywana wartoĞü 0, co oznacza, Īe zostanie wyĞwietlony pierwszy obraz. Po ostatecznym ustaleniu identyfikatora wyĞwietlanego obrazu są ustawiane wartoĞci zmiennych, które w dalszej czĊĞci posáuĪą jako parametry dla znaczników HTML. Są to:  $imgName — nazwa pliku graficznego pobrana z tablicy $dir,  $first — identyfikator pierwszego obrazu (czyli 0), 2 Wyjątkiem jest sytuacja, gdy parametrem przekazanym funkcji scandir jest nazwa katalogu gáównego. 320 PHP5. Praktyczny kurs  $last — identyfikator ostatniego obrazu, czyli liczba elementów tablicy $dir pomniejszona o 1 ($dir - 1),  $next — identyfikator nastĊpnego obrazu, czyli wartoĞü aktualnego identyfikatora powiĊkszona o 1 ($imgId + 1),  $prev — identyfikator poprzedniego obrazu, czyli wartoĞü aktualnego identyfikatora pomniejszona o 1 ($imgId - 1). NaleĪy przy tym zwróciü uwagĊ, Īe jeĞli aktualny identyfikator ma wartoĞü 0, to war- toĞcią $prev powinno byü 0 (nie ma bowiem wczeĞniejszego obrazu) — i analogicz- nie jeĞli aktualny identyfikator ma wartoĞü równą identyfikatorowi ostatniego obrazu, to wartoĞcią $next powinien byü wáaĞnie on (nie ma bowiem nastĊpnego obrazu). Wszystkie zebrane w opisany sposób dane pozwalają na wygenerowanie znacznika img w postaci: img src=\ $imgDir/$imgName\ alt=\ $imgName\ / np.: img src= ./images/obraz001.jpg alt= obraz001.jpg / oraz odnoĞników:  a href= galeria.php?imgid=$first Pierwszy /a — do obrazu pierwszego,  a href= galeria.php?imgid=$prev Poprzedni /a — do obrazu poprzedniego,  a href= galeria.php?imgid=$next Nastúpny /a — do obrazu nastĊpnego,  a href= galeria.php?imgid=$last Ostatni /a — do obrazu ostatniego,  oraz pozostaáych danych: nazwy pliku graficznego ($imgName), numeru aktualnego obrazu ($imgId + 1), caákowitej liczby obrazów ($count). Galeria z miniaturami obrazów Nieco bardziej záoĪonym przykáadem jest galeria zawierająca miniatury obrazów (ta- ka jak zaprezentowana na rysunku 6.3). U góry strony wyĞwietlana jest pewna liczba miniatur (zdefiniowana w kodzie skryptu). KlikniĊcie kaĪdej z nich powoduje wyĞwie- tlenie w dolnej czĊĞci strony wybranego obrazu w peánej rozdzielczoĞci. Pod minia- turkami znajdują siĊ z kolei odnoĞniki pozwalające na nawigacjĊ pomiĊdzy kolejnymi stronami miniatur. Spróbujmy napisaü skrypt tworzący taką galeriĊ. Zacznijmy od przygotowania obrazów. Pliki graficzne zawierające zdjĊcia w peánej rozdzielczoĞci zapiszemy w podkatalogu o nazwie images, natomiast miniatury w pod- katalogu thumbnails. Miniatury moĪna przygotowaü w dowolnym programie graficz- nym. Oba podkatalogi zapiszemy w katalogu, w którym bĊdzie znajdowaá siĊ skrypt realizujący funkcje galerii. Skrypt nazwiemy galeria.php. OczywiĞcie wszystkie wy- mienione nazwy moĪna zmieniaü wedáug wáasnych potrzeb, bĊdzie to jednak wymaga- áo uwzglĊdnienia wprowadzonych zmian w kodzie. NaleĪy zwróciü przy tym uwagĊ, Rozdziaä 6. i Grafika i obrazy 321 Rysunek 6.3. Galeria zawierająca miniatury obrazów aby w podkatalogach przeznaczonych do umieszczania plików galerii znajdowaáy siĊ jedynie pliki graficzne, poniewaĪ skrypt nie bĊdzie sprawdzaá typów plików (weryfi- kacja zostanie pominiĊta w celu uproszczenia kodu). Zastanówmy siĊ teraz, jak ma wyglądaü struktura strony zawierającej galeriĊ. MoĪe byü ona zrealizowana na kilka sposobów. NajproĞciej jest uĪyü kilku warstw (które moĪna dowolnie ostylowaü) albo teĪ do formatowania uĪyü zwykáej tabeli (choü nie jest to obecnie sposób zalecany). Skorzystajmy zatem z trzech warstw. Górna bĊdzie przechowywaü obrazy miniatur, Ğrodkowa — odnoĞniki do kolejnych stron z miniatu- rami, a dolna — wybrany przez uĪytkownika obraz w peánej rozdzielczoĞci. Struktura ta bĊdzie miaáa zatem schematyczną postaü: div id= miniatury style= text-align:center !-- lista miniatur -- /div div id= nawigacja style= text-align:center !-- odnoĞniki do kolejnych stron z miniaturami -- /div div id= obraz style= text-align:center !-- obraz w peánej rozdzielczoĞci-- /div Do skryptu bĊdą przekazywane dwa argumenty: 322 PHP5. Praktyczny kurs  pid — (od page id) okreĞlający numer strony z miniaturkami, która ma zostaü wyĞwietlona w górnej czĊĞci witryny.  iid — (od image id) okreĞlający numer obrazu, który ma zostaü wyĞwietlony w dolnej czĊĞci witryny. Miniatury powinny mieü takie same nazwy jak wáaĞciwe pliki z grafiką i byü wedáug nich ustawione w kolejnoĞci alfabetycznej. PoniewaĪ liczba obrazów w galerii nie bĊ- dzie z góry ustalana (tak aby moĪna byáo ją aktualizowaü jedynie przez zmianĊ zawar- toĞci katalogów z grafiką), niezbĊdne bĊdzie obliczanie liczby stron z miniaturami, co bĊdzie siĊ odbywaáo wedáug prostego wzoru: liczba stron = cađkowita liczba miniatur / liczba miniatur na pojedynczej stronie Kod skryptu generującego galeriĊ zostaá przedstawiony na listingu 6.3. W celu zaosz- czĊdzenia miejsca zostaáy w nim pominiĊte wstĊpne znaczniki HTML, które są takie same jak w poprzednim przykáadzie. Listing 6.3. Skrypt generujący galeriĊ z miniaturami obrazów !-- początek kodu HTML jak w przykáadzie z listingu 6.2 -- body ?php $imgDir = ./images ; $thumbDir = ./thumbnails ; $thOnPage = 5; if(isSet($_GET[ iid ]) isSet($_GET[ pid ])){ $iId = $_GET[ iid ]; $pId = $_GET[ pid ]; } else{ $iId = 0; $pId = 0; } $dir = scandir($thumbDir); array_shift($dir); array_shift($dir); $count = count($dir); $pages = ceil($count / $thOnPage); if($iId 0 || $iId $count || $pId 0 || $pId $pages){ $iId = 0; $pId = 0; } ? div id= miniatury style= text-align:center ?php for($i = 0; $i $thOnPage; $i++){ $imgNo = $pId * $thOnPage + $i; if($imgNo = $count) break; $imgName = $dir[$imgNo]; Rozdziaä 6. i Grafika i obrazy 323 $imgTag = img src=\ $thumbDir/$imgName\ alt=\ $imgName\ / \n ; $aHead = a href=\ ./galeria.php?pid=$pId amp;iid=$imgNo\ ; $aFoot = /a ; echo $aHead $imgTag $aFoot\n ; } ? /div div id= nawigacja style= text-align:center Idļ do strony: ?php for($i = 0; $i $pages; $i++){ echo a href=\ ./galeria.php?pid=$i amp;iid=$iId\ $i /a nbsp; ; } ? /div div id= obraz style= text-align:center ?php $imgName = $dir[$iId]; echo img src=\ $imgDir/$imgName\ alt=\ $imgName\ / \n ; ? /div /body /html Kod rozpoczyna siĊ od ustawienia zmiennych, które zawierają: nazwĊ katalogu z ob- razami ($imgDir), nazwĊ katalogu z miniaturami ($thumbDir) oraz liczbĊ miniatur wy- Ğwietlanych na pojedynczej stronie ($thOnPage). DziĊki temu wszelkie modyfikacje tych parametrów bĊdą mogáy byü wykonywane w prosty sposób w jednym miejscu. NastĊpnie ma miejsce sprawdzenie, czy do skryptu zostaáy przekazane parametry pid i iid. JeĞli tak, ich wartoĞci za pomocą funkcji intval są konwertowane na liczby caá- kowite i przypisywane zmiennym $pid i $iid, jeĞli nie — zmienne te otrzymują war- toĞü 0. Oznacza to, Īe wywoáanie skryptu bez podania parametrów spowoduje, iĪ zo- staną wyĞwietlone strona miniatur oraz obraz, które bĊdą miaáy indeks 0. Kolejne instrukcje to wczytanie i zapisanie w zmiennej $dir zawartoĞci katalogu z mi- niaturami oraz usuniĊcie dwóch pierwszych komórek tej tablicy, czyli pozbycie siĊ wskazaĔ do katalogu bieĪącego i nadrzĊdnego. Te czynnoĞci są wykonywane dokáad- nie w ten sam sposób jak w poprzednim przykáadzie. Po wczytaniu danych nastĊpuje obliczenie caákowitej liczby plików (zmienna $count) oraz wynikającej z niej liczby stron z miniaturami (zmienna $pages). PoniewaĪ w tym drugim przypadku wynik mo- Īe byü liczbą z czĊĞcią uáamkową, jest on zaokrąglany do liczby caákowitej za pomo- cą funkcji ceil (zaokrąglenie w górĊ). Gdy znamy juĪ zarówno caákowitą liczbĊ plików, jak i liczbĊ stron z miniaturami, a za- tem równieĪ zakres wartoĞci, jakie mogą przyjmowaü zmienne $iId i $pId, dokonuje- my weryfikacji danych. Nie moĪna bowiem zakáadaü, Īe dane przesáane do skryptu na pewno są poprawne. W przypadku stwierdzenia jakiejkolwiek nieprawidáowoĞci (war- toĞci poza dopuszczalnym zakresem) zmiennym $iId i $pId zostaną przypisane warto- Ğci 0, czyli skrypt zachowa siĊ tak, jakby nie zostaáy mu przekazane Īadne parametry. Po przeprowadzeniu wszystkich opisanych procedur moĪna juĪ przystąpiü do wygene- rowania górnego wiersza zawierającego obrazy miniatur. Proces ten odbywa siĊ w pĊtli 324 PHP5. Praktyczny kurs for, która ma tyle przebiegów, ile miniatur ma siĊ znaleĨü na stronie. Wewnątrz pĊtli najpierw jest obliczany indeks aktualnie przetwarzanej miniatury (zmienna $imgNo), który wynika ze wzoru: indeks obrazu = indeks wyħwietlanej strony * liczba miniatur na stronie + $i Gdyby siĊ okazaáo, Īe tak wyliczona wartoĞü jest wiĊksza od caákowitej liczby obra- zów lub jej równa, pĊtla zostanie przerwana. Oznacza to bowiem, Īe przetwarzana jest ostatnia strona z miniaturami, na której liczba miniatur moĪe byü mniejsza niĪ na po- zostaáych stronach. Po obliczeniu indeksu aktualnej miniatury z tablicy $dir jest odczytywana (i zapisy- wana w zmiennej $imgName) nazwa odpowiadającego jej pliku. Pozwala to na skon- struowanie znacznika img w postaci: img src= $thumbDir/$imgName alt= $imgName / który jest przypisywany zmiennej $imgTag. Konstruowany jest równieĪ znacznik a , który spowoduje, Īe miniatura bĊdzie jednoczeĞnie odnoĞnikiem pozwalającym na wy- Ğwietlenie odpowiadającego jej obrazu w peánej rozdzielczoĞci. Znacznik ten przyjmu- je postaü: a href= ./galeria.php?pid=$pId amp;iid=$imgNo znacznik img /a W kodzie zostaá on rozbity na dwie czĊĞci — $aHead i $aFoot — tak aby w prosty spo- sób moĪna byáo skonstruowaü zawartoĞü wysyáaną do przeglądarki za pomocą instruk- cji echo. Przyjmuje ona postaü: echo $aHead $imgTag $aFoot ; NaleĪy zwróciü uwagĊ na sposób zapisania znaku w postaci amp;. Jest to niezbĊdne, aby zachowaü zgodnoĞü z obowiązującymi standardami HTML. Druga czĊĞü strony (druga warstwa div ) musi zawieraü odnoĞniki do wszystkich stron z miniaturami. Jej konstrukcja nie jest skomplikowana. OdnoĞniki są generowa- ne w pĊtli for, a kaĪdy z nich ma postaü: a href= ./galeria.php?pid=$i amp;iid=$iId $i /a nbsp; Jak widaü, zmienia siĊ tu wartoĞü parametru pid, natomiast wartoĞcią iid jest indeks aktualnie wyĞwietlanego obrazu. DziĊki temu obraz w peánej rozdzielczoĞci wyĞwie- tlany w dolnej komórce tabeli bĊdzie siĊ zmieniaá tylko na wyraĨne Īyczenie uĪytkow- nika przeglądającego galeriĊ, gdy kliknie on wybraną miniaturĊ. Równie prosta jest konstrukcja ostatniego, dolnego wiersza witryny (trzeciej warstwy div ). Powinien siĊ w nim znaleĨü jedynie znacznik img powodujący wyĞwietlenie wybranego przez uĪytkownika obrazu. Nazwa pliku z tym obrazem jest pobierana z tablicy $dir (jej indeks jest zapisany w zmiennej $iId) i przypisywana pomocniczej zmiennej $imgName. NastĊpnie konstruowany jest znacznik img w postaci: img src= $imgDir/$imgName alt= $imgName / który jest wysyáany do przeglądarki za pomocą instrukcji echo. Rozdziaä 6. i Grafika i obrazy Przetwarzanie grafiki Tworzenie obrazu 325 W celu utworzenia nowego obrazu w pamiĊci naleĪy wykorzystaü funkcjĊ imagecreate- truecolor3, której jako argumenty przekazuje siĊ szerokoĞü i wysokoĞü obrazu. Sche- matyczne wywoáanie ma zatem postaü: imagecreatetruecolor(szerokoħè, wysokoħè) Funkcja zwraca identyfikator obrazu (wartoĞü typu resource), który pozwala na dal- sze operacje. Gdy obraz utworzony za pomocą imagecreatetruecolor nie bĊdzie juĪ potrzebny, powinien zostaü usuniĊty z pamiĊci za pomocą wywoáania imagedestroy. Funkcja imagedestroy zwraca wartoĞü true, jeĞli operacja siĊ powiedzie, lub false w przeciwnym wypadku. Konstrukcja skryptu (dla przykáadowego obrazu o rozmia- rach 200×100 pikseli) powinna byü wiĊc nastĊpująca: ?php $wysokosc = 100; $szerokosc = 200; $img = imagecreatetruecolor($szerokosc, $wysokosc); //operacje na obrazie imagedestroy($img); ? W przypadku gdy chcemy wczytaü obraz z pliku graficznego, naleĪy uĪyü funkcji de- dykowanej dla danego formatu graficznego4:  imagecreatefromgif — dla formatu GIF,  imagecreatefromjpeg — dla formatu JPEG,  imagecreatefrompng — dla formatu PNG. KaĪda z nich przyjmuje jako argument nazwĊ pliku graficznego (o ile konfiguracja Ğrodowiska na to pozwala, moĪe byü to teĪ ciąg wskazujący URL obrazu). Wczytanie zawartoĞci przykáadowego pliku o nazwie obraz1.jpg, który znajduje siĊ w katalogu /var/www/images, osiągniemy przez wykonanie instrukcji: $img = imagecreatefromjpeg( /var/www/images/obraz1.jpg ); a gdy ten obraz znajduje siĊ w katalogu c:\www\obrazy\, dziĊki instrukcji: $img = imagecreatefromjpeg( c:\\www\\obrazy\\obraz1.jpg ); lub: $img = imagecreatefromjpeg( c:/www/obrazy/obraz1.jpg ); 3 MoĪna takĪe uĪyü funkcji imagecreate, zaleca siĊ jednak korzystanie z imagecreatetruecolor. 4 DostĊpne są takĪe funkcje dla mniej popularnych formatów, np. gd2, bmp, xpm itp. Ich opis moĪna znaleĨü w dokumentacji PHP. 326 PHP5. Praktyczny kurs Zapisywanie plików graficznych Obraz utworzony w pamiĊci (niezaleĪnie od tego, jak ta czynnoĞü zostaáa wykonana) moĪe byü w prosty sposób zapisany do pliku lub wysáany do standardowego wyjĞcia (np. przeglądarki). W zaleĪnoĞci od wybranego formatu naleĪy uĪyü jednej z dedyko- wanych funkcji:  imagegif — dla formatu GIF,  imagejpeg — dla formatu JPEG,  imagepng — dla formatu PNG. KaĪda z nich przyjmuje dwa argumenty — pierwszy okreĞla obraz, natomiast drugi nazwĊ pliku. JeĞli parametr okreĞlający nazwĊ pliku zostanie pominiĊty, obraz jest wy- syáany do standardowego wyjĞcia. Aby na przykáad zapisaü na dysku plik typu JPEG o nazwie image.jpg utworzony z obrazu wskazywanego przez zmienną $img, zastosu- jemy konstrukcjĊ: imagejpeg($img, image.jpg ); aby natomiast wysáaü taki obraz do przeglądarki — konstrukcjĊ5: imagejpeg($img); Funkcje imagejpg oraz imagepng mogą teĪ przyjmowaü trzeci argument okreĞlający ja- koĞü pliku wynikowego. W przypadku imagejpg jest to wartoĞü od 0 do 100, przy czym 0 oznacza najwiĊkszą kompresjĊ i najwiĊkszą utratĊ jakoĞci (ale najmniejszy rozmiar pliku wynikowego), natomiast 100 — najmniejszą kompresjĊ i najmniejszą utratĊ ja- koĞci (ale najwiĊkszy rozmiar pliku wynikowego). W przypadku imagepng jest to war- toĞü od 0 do 9, gdzie 0 oznacza brak kompresji, a 9 najwiĊkszą kompresjĊ6. JeĪeli stosowany jest trzeci argument, a obraz powinien byü wysáany do przeglądarki, jako nazwy pliku (drugi argument) naleĪy uĪyü wartoĞci null, np.: imagejpeg($img, null, 85); Kolory Wiele funkcji operujących na obrazie wymaga podania w postaci argumentu koloru, któ- ry ma byü uĪyty (np. funkcja rysująca linie wymaga podania koloru linii). Aby jednak móc skorzystaü z danego koloru, niezbĊdne jest wczeĞniejsze jego zaalokowanie, które odbywa siĊ przez wywoáanie funkcji imagecolorallocate. Jej wywoáanie ma postaü: imagecolorallocate($obraz, czerwony, zielony, niebieski) gdzie $obraz to identyfikator zwrócony przez jedną z funkcji tworzących obraz, nato- miast pozostaáe argumenty okreĞlają poszczególne skáadowe koloru w formacie RGB. Mogą byü one podawane w postaci dziesiĊtnej lub szesnastkowej. Wybrane kolory 5 W takim przypadku niezbĊdne byáoby równieĪ wczeĞniejsze wysáanie odpowiedniego nagáówka HTTP. 6 Ten argument jest dostĊpny od PHP w wersji 5.1.2. Począwszy od wersji 5.1.3, jest teĪ moĪliwe stosowanie czwartego argumentu okreĞlającego filtry, jakie mają byü zastosowane do obrazu. Rozdziaä 6. i Grafika i obrazy 327 i odpowiadające im skáadowe RGB zostaáy przedstawione w tabeli 6.1. Funkcja ima- gecolorallocate zwraca identyfikator koloru lub wartoĞü false (w wersjach PHP po- niĪej 5.1.3 — –1), jeĞli jej dziaáanie nie zakoĔczyáo siĊ powodzeniem. Przykáadowo, uzyskanie indeksu koloru czerwonego dla obrazu wskazywanego przez zmienną $img bĊdzie wymagaáo wywoáania w postaci: $czerwony = imagecolorallocate($img, 255, 0, 0); lub: $czerwony = imagecolorallocate($img, 0xFF, 0, 0); Tabela 6.1. Wybrane kolory i odpowiadające im skáadowe RGB Kolor BeĪowy Biaáy BáĊkitny Brązowy Czarny Czerwony Ciemnoczerwony Ciemnoniebieski Ciemnoszary Ciemnozielony Fiolet Koralowy Niebieski Oliwkowy Purpurowy Srebrny Stalowoniebieski Szary Zielony ĩóátozielony ĩóáty Skäadowa R Skäadowa G Skäadowa B 245 255 0 139 0 255 192 0 169 0 238 255 0 128 128 192 70 128 0 192 255 245 255 191 69 0 0 0 0 169 100 130 127 0 128 0 192 130 128 255 255 255 220 255 255 19 0 0 0 139 169 0 238 80 255 0 128 192 180 128 0 62 0 JeĞli chcemy wypeániü wybranym kolorem pewien obszar obrazu, moĪna skorzystaü z funkcji imagefill, której wywoáanie ma postaü: imagefill($obraz, wspx, wspy, kolor); gdzie $obraz okreĞla obraz, wspx i wspy — wspóárzĊdną punktu, od którego rozpocznie siĊ procedura wypeániania, a kolor — kolor wypeánienia. Aby na przykáad w obrazie wskazywanym przez zmienną $img wypeániü kolorem niebieskim obszar rozpoczyna- jący siĊ od punktu o wspóárzĊdnych (15, 25), naleĪy zastosowaü instrukcjĊ: 328 PHP5. Praktyczny kurs $niebieski = imagecolorallocate($img, 0, 0, 0xFF); imagefill($img, 15, 25, $niebieski); Informacje o obrazie JeĞli chcemy otrzymaü informacjĊ o rozmiarach znajdującego siĊ w pamiĊci obrazu, mo- Īemy skorzystaü z funkcji imagesx (z ang. image size x) i imagesy (z ang. image size y). Pierwsza z nich zwraca szerokoĞü, a druga wysokoĞü obrazu. W obu przypadkach ja- ko argument naleĪy podaü odnoĞnik do obrazu. JeĞli zatem utworzyliĞmy lub wczyta- liĞmy z pliku obraz, który jest identyfikowany przez zmienną $img, to jego rozmiary moĪemy uzyskaü za pomocą przykáadowych wywoáaĔ: $szerokosc = imagesx($img); $wysokosc = imagesy($img); Równie przydatną funkcją jest getimagesize, która (nieco wbrew swojej nazwie) zwraca wiele przydatnych informacji, a nie tylko rozmiary obrazu. Jej wywoáanie ma postaü: getimagesize(nazwa_pliku[, $tablica]); gdzie nazwa_pliku okreĞla nazwĊ pliku, z którego dane chcemy odczytaü (moĪe to byü zarówno plik lokalny, jak i zdalny), a tablica — opcjonalną tablicĊ, w jakiej zostaną zapisane dodatkowe informacje (w obecnej wersji PHP zapisywane są w niej jedynie niektóre znaczniki APP z plików JPG). WartoĞcią zwracaną przez getimagesize jest tablica o nastĊpującej zawartoĞci:  indeks 0 — szerokoĞü obrazu w pikselach,  indeks 1 — wysokoĞü obrazu w pikselach,  indeks 2 — okreĞlenie typu pliku (dostĊpne wartoĞci zostaáy zaprezentowane w tabeli 6.2),  indeks 3 — ciąg znaków zapisany w postaci height= wysokoħè width= szerokoħè , który okreĞla rozmiary obrazu,  klucz mime — ciąg znaków okreĞlający typ mime pliku.  klucz channels — liczba kanaáów (3 dla RGB, 4 dla CMYK).  klucz bits — liczba bitów, na których zapisywany jest kolor (z czego bezpoĞrednio wynika maksymalna moĪliwa liczba kolorów w obrazie). Generowanie grafiki Na obrazie utworzonym lub wczytanym w sposób opisany w sekcji „Tworzenie obra- zu” moĪna za pomocą odpowiednich funkcji wykonywaü róĪne operacje graficzne. Na kolejnych stronach omówione zostanie kilka z nich. Funkcje te pozwalają m.in. na rysowanie linii, áuków, prostokątów, wielokątów i elips. Rysowanie linii Do rysowania linii sáuĪy funkcja imageline, której wywoáanie ma postaü: imageline($obraz, xp, yp, xk, yk, kolor) Rozdziaä 6. i Grafika i obrazy 329 Tabela 6.2. Typy plików rozpoznawane przez funkcjĊ getimagesize Typ GIF JPEG PNG SWF PSD BMP TIFF_II7 TIFF_MM8 JPC JPEG_2000 JP2 JPX JB2 SWC IFF WBMP XBM ICO9 WartoĈè 1 2 3 4 5 6 7 8 9 9 10 11 12 13 14 15 16 17 gdzie:  $obraz — to okreĞlenie obrazu,  xp — wspóárzĊdna x początku linii,  yp — wspóárzĊdna y początku linii,  xk — wspóárzĊdna x koĔca linii,  yk — wspóárzĊdna y koĔca linii,  kolor — okreĞlenie koloru. NaleĪy przy tym pamiĊtaü, Īe wspóárzĊdne lewego górnego rogu to (0, 0). Przykáado- wo, aby utworzyü obraz o biaáym tle i o rozdzielczoĞci 100u30 pikseli, który by za- wieraá dwie przekątne (pierwszą koloru zielonego, a drugą czerwonego), i zapisaü go na dysku pod nazwą obraz1.jpg, naleĪy wykonaü kod widoczny na listingu 6.4. 7 KolejnoĞü bajtów zgodna z formatem Intela (z ang. intel byte order). 8 KolejnoĞü bajtów zgodna z formatem Motoroli (z ang. motorola byte order). 9 Począwszy od PHP w wersji 5.3.0. 330 PHP5. Praktyczny kurs Listing 6.4. Rysowanie przekątnych ?php $img = imagecreatetruecolor(100, 30); $bialy = imagecolorallocate($img, 255, 255, 255); $zielony = imagecolorallocate($img, 0, 255, 0); $czerwony = imagecolorallocate($img, 255, 0, 0); imagefill($img, 0, 0, $bialy); imageline($img, 0, 0, 99, 29, $czerwony); imageline($img, 0, 29, 99, 0, $zielony); imagejpeg($img, obraz1.jpg ); imagedestroy($img); ? Obraz jest tworzony za pomocą funkcji imagecreatetruecolor. Ta funkcja zwraca za- sób bĊdący odwoáaniem do obrazu (czy teĪ identyfikatorem obrazu). A zatem w dal- szej czĊĞci skryptu obraz bĊdzie reprezentowany przez zmienną $img. W uproszczeniu czĊsto mówi siĊ po prostu o obrazie $img. NastĊpnie za pomocą funkcji imagecolorallocate alokowane są trzy kolory: biaáy, zie- lony i czerwony. Wyniki dziaáania funkcji (identyfikatory kolorów) są przypisywane zmiennym $bialy, $zielony i $czerwony. Obszar obrazu jest wypeániany kolorem bia- áym dziĊki funkcji imagefill, a przekątne są rysowane przez funkcjĊ imageline. Na za- koĔczenie obraz jest zapisywany do pliku o nazwie obraz1.jpg (odpowiada za to funk- cja imagejpg) oraz usuwany z pamiĊci (odpowiada za to funkcja imagedestroy). Rysowanie prostokñtów Do rysowania prostokątów sáuĪą funkcje imagerectangle i imagefilledrectangle, któ- rych wywoáanie ma postaü: imagerectangle($obraz, xp, yp, xk, yk, kolor) imagefilledrectangle($obraz, xp, yp, xk, yk, kolor) gdzie:  $obraz — to okreĞlenie obrazu,  xp — wspóárzĊdna x lewego górnego rogu,  yp — wspóárzĊdna y lewego górnego rogu,  xk — wspóárzĊdna x prawego dolnego rogu,  yk — wspóárzĊdna y prawego dolnego rogu,  kolor — okreĞlenie koloru. Pierwsza funkcja tworzy sam kontur prostokąta, a druga prostokąt wypeániony kolorem. Aby zatem utworzyü obraz o biaáym tle i o rozdzielczoĞci 100×100 pikseli, który by zawieraá cztery uáoĪone w szachownicĊ prostokąty w kolorach niebieskim i zielonym (w tym dwa wypeánione wáasnym kolorem i dwa wypeánione kolorem táa), oraz zapi- saü go na dysku pod nazwą obraz1.jpg, naleĪy wykonaü kod widoczny na listingu 6.5. Rozdziaä 6. i Grafika i obrazy Listing 6.5. Tworzenie prostokątów 331 ?php $img = imagecreatetruecolor(100, 100); $bialy = imagecolorallocate($img, 255, 255, 255); $zielony = imagecolorallocate($img, 0, 255, 0); $niebieski = imagecolorallocate($img, 0, 0, 255); imagefill($img, 0, 0, $bialy); imagefilledrectangle($img, 10, 10, 50, 50, $niebieski); imagefilledrectangle($img, 50, 50, 90, 90, $niebieski); imagerectangle($img, 10, 50, 50, 90, $zielony); imagerectangle($img, 50, 10, 90, 50, $zielony); imagejpeg($img, obraz1.jpg ); imagedestroy($img); ? Rysowanie wielokñtów Do rysowania wielokątów sáuĪą funkcje imagepolygon i imagefilledpolygon, których wywoáanie ma postaü: imagepolygon($obraz, $punkty, ile, kolor) imagefilledpolygon($obraz, $punkty, ile, kolor) gdzie:  $obraz — to okreĞlenie obrazu,  $punkty — tablica zawierająca wspóárzĊdne kolejnych punktów,  ile — liczba wierzchoáków,  kolor — okreĞlenie koloru. Tablica punkty musi byü zbudowana w taki sposób, Īe klucze 0 i 1 zawierają wspóárzĊd- ne x i y pierwszego wierzchoáka, klucze 2 i 3 — drugiego wierzchoáka, 4 i 5 — trze- ciego wierzchoáka itd. Funkcja imagepolygon rysuje sam kontur wielokąta, natomiast imagefilledpolygon wielokąt wypeániony wskazanym kolorem. Aby na przykáad uzy- skaü obraz o biaáym tle i o rozdzielczoĞci 320u200 pikseli, który by zawieraá szeĞcio- kąt wypeániony kolorem Īóátym, naleĪy wykorzystaü kod widoczny na listingu 6.6. Listing 6.6. Tworzenie szeĞciokąta wypeánionego kolorem Īóátym ?php $img = imagecreatetruecolor(320, 200); $bialy = imagecolorallocate($img, 255, 255, 255); $zolty = imagecolorallocate($img, 255, 255, 0); imagefill($img, 0, 0, $bialy); $tab = array(80, 100, 120, 20, 200, 20, 240, 100, 200, 180, 120, 180); imagefilledpolygon($img, $tab, 6, $zolty); 332 PHP5. Praktyczny kurs imagejpeg($img, obraz1.jpg ); imagedestroy($img); ? Rysowanie elips Do rysowania elips sáuĪą funkcje imageelipse i imagefilledelipse, których wywoáa- nie ma postaü: imageelipse($obraz, xc, yc, xw, xh, kolor) imagefilledelipse($obraz, xc, yc, xw, xh, kolor) gdzie:  $obraz — to okreĞlenie obrazu,  xc — wspóárzĊdna x Ğrodka elipsy,  yc — wspóárzĊdna y Ğrodka elipsy,  xw — szerokoĞü elipsy (Ğrednica pozioma),  xh — wysokoĞü elipsy (Ğrednica pionowa),  kolor — okreĞlenie koloru. Funkcja imageelipse rysuje sam kontur, natomiast imagefilledelipse elipsĊ wypeá- nioną wskazanym kolorem. Aby na przykáad uzyskaü obraz o biaáym tle i o rozdziel- czoĞci 320×200 pikseli, który by zawieraá czarny okrąg oraz elipsĊ wypeánioną kolo- rem niebieskim, naleĪy wykorzystaü kod widoczny na listingu 6.7. Listing 6.7. Rysowanie elips ?php $img = imagecreatetruecolor(320, 200); $bialy = imagecolorallocate($img, 255, 255, 255); $czarny = imagecolorallocate($img, 0, 0, 0); $niebieski = imagecolorallocate($img, 0, 0, 255); imagefill($img, 0, 0, $bialy); imagefilledellipse($img, 100, 100, 100, 30, $niebieski); imageellipse($img, 220, 100, 80, 80, $czarny); imagejpeg($img, obraz1.jpg ); imagedestroy($img); ? Rysowanie wycinków elips Do rysowania wycinków elips sáuĪą funkcje imagearc i imagefilledarc, których wy- woáanie ma postaü: imagearc($obraz, xc, yc, xw, xh, k1, k2, kolor) imagefilledarc($obraz, xc, yc, xw, xh, k1, k2, kolor, styl) gdzie: Rozdziaä 6. i Grafika i obrazy 333  $obraz — to okreĞlenie obrazu,  xc — wspóárzĊdna x Ğrodka elipsy,  yc — wspóárzĊdna y Ğrodka elipsy,  xw — szerokoĞü elipsy (Ğrednica pozioma),  xh — wysokoĞü elipsy (Ğrednica pionowa),  k1 — kąt (w stopniach) okreĞlający liniĊ początkową,  k2 — kąt (w stopniach) okreĞlający liniĊ koĔcową,  kolor — okreĞlenie koloru,  styl — styl wypeánienia. Pierwsza z nich rysuje sam áuk, druga wycinek elipsy zgodnie ze stylem przekazanym w argumencie styl. Argument ten skáada siĊ z nastĊpujących staáych, które moĪna áą- czyü przez sumĊ bitową (operator |):  IMG_ARC_PIE — wycinek, którego koĔce są poáączone áukiem, standardowo wypeániony zadanym kolorem.  IMG_ARC_CHORD — wycinek, którego koĔce poáączone są linią prostą, standardowo wypeániony zadanym kolorem.  IMG_ARC_NOFILL — wycinek nie bĊdzie wypeániany kolorem.  IMG_ARC_EDGED — w poáączeniu z IMG_ARC_NOFILL powoduje, Īe zostanie wykreĞlony peány kontur wycinka. Opcje IMG_ARC_PIE i IMG_ARC_CHORD wzajemnie siĊ wykluczają, czyli nie mogą byü uĪy- te jednoczeĞnie. Wygenerowanie obrazu widocznego na rysunku 6.4 osiągniemy zatem, stosując kod zaprezentowany na listingu 6.8. Rysunek 6.4. Wykorzystanie róĪnych opcji funkcji imagefilledarc Listing 6.8. RóĪne sposoby rysowania wycinków elips ?php $img = imagecreatetruecolor(400, 200); $bialy = imagecolorallocate($img, 255, 255, 255); $czerwony = imagecolorallocate($img, 255, 0, 0); $niebieski = imagecolorallocate($img, 0, 0, 255); imagefill($img, 0, 0, $bialy); imagearc($img, 110, 100, 80, 80, 0, 90, $czerwony); imagearc($img, 90, 100, 80, 80, 90, 180, $czerwony); imagearc($img, 90, 90, 80, 80, 180, 270, $czerwony); imagearc($img, 110, 90, 80, 80, 270, 360, $czerwony); 334 PHP5. Praktyczny kurs imagefilledarc($img, 310, 100, 80, 80, 0, 90, $niebieski, IMG_ARC_PIE); imagefilledarc($img, 290, 100, 80, 80, 90, 180, $niebieski, IMG_ARC_CHORD); imagefilledarc($img, 290, 90, 80, 80, 180, 270, $niebieski, IMG_ARC_NOFILL); imagefilledarc($img, 310, 90, 80, 80, 270, 360, $niebieski, IMG_ARC_NOFILL | IMG_ARC_EDGED); imagejpeg($img, obraz1.jpg ); imagedestroy($img); ? Przetwarzanie obrazów Nakäadanie filtrów WĞród funkcji przetwarzających obrazy znajduje siĊ imagefilter, która nakáada na nie jeden z dostĊpnych filtrów. Jej wywoáanie ma postaü: imagefilter($obraz, filtr[, arg1[, arg2[, arg3]]]) Argument $obraz okreĞla obraz poddawany zmianie, filtr — rodzaj filtra (dostĊpne wartoĞci zostaáy podane w tabeli 6.3), natomiast arg1, arg2, arg3 i arg4 to parametry niezbĊdne do dziaáania niektórych filtrów. Funkcja zwraca wartoĞü true, jeĞli jej dzia- áanie zakoĔczyáo siĊ sukcesem, lub false w przeciwnym razie. Tabela 6.3. Filtry dostĊpne dla funkcji imagefilter Nazwa filtra IMG_FILTER_NEGATE IMG_FILTER_GRAYSCALE IMG_FILTER_BRIGHTNESS IMG_FILTER_CONTRAST IMG_FILTER_COLORIZE IMG_FILTER_EDGEDETECT IMG_FILTER_EMBOSS IMG_FILTER_GAUSSIAN_BLUR IMG_FILTER_SELECTIVE_BLUR IMG_FILTER_MEAN_REMOVAL IMG_FILTER_SMOOTH IMG_FILTER_PIXELATE Opis Inwersja kolorów. Konwersja obrazu do odcieni szaroĞci. Zmiana poziomu jasnoĞci obrazu. Do jego ustalenia naleĪy wykorzystaü argument arg1. Zmiana kontrastu obrazu. Do ustalenia kontrastu naleĪy wykorzystaü argument arg1. Dziaáanie podobne do IMG_FILTER_GRAYSCALE z tą róĪnicą, Īe istnieje moĪliwoĞü ustalenia koloru bazowego. Kolor ten naleĪy podaü w formacie RGB, gdzie R to wartoĞü arg1, G — wartoĞü arg2, B — wartoĞü arg3, a kanaá alfa (przezroczystoĞü) — arg4 (dostĊpny od PHP 5.2.5). Uwypuklenie krawĊdzi w obrazie. Wytáoczenie obrazu. Rozmycie obrazu metodą Gaussa. Rozmycie obrazu. Uwypuklenie krawĊdzi. Wygáadzenie (zmiĊkczenie, rozmycie) obrazu. Parametr arg1 pozwala na okreĞlenie poziomu intensywnoĞci efektu. Pikselizacja obrazu. Argument arg1 okreĞla rozmiar bloku, natomiast arg2 ustawiony na true (domyĞlnie false) wáącza przetwarzanie zaawansowane (wiĊksze wygáadzenie obrazu wynikowego). Rozdziaä 6. i Grafika i obrazy 335 MoĪna zatem napisaü przykáadowy skrypt, który podczas wywoáywania w wierszu po- leceĔ bĊdzie otrzymywaá nazwĊ pliku graficznego w formacie JPG oraz wartoĞü caá- kowitą, a takĪe wykona zmianĊ poziomu kontrastu tego pliku. Dziaáający w ten sposób kod zostaá zaprezentowany na listingu 6.9. Listing 6.9. Zmiana poziomu kontrastu ?php if($argc 3){ exit( Wywođanie skryptu: php konwertuj.php nazwa_pliku poziom_kontrastu\n ); } if(!$img = imagecreatefromjpeg($argv[1])){ exit( Nie udađo siú wczytaè pliku {$argv[1]}.\n ); } if(!is_numeric($argv[2])){ exit( Poziom kontrastu musi byè liczbæ cađkowitæ!\n ); } if(!imagefilter($img, IMG_FILTER_CONTRAST, $argv[2])){ exit( Nie udađo siú zmieniè poziomu kontrastu w pliku {$argv[1]}. ); } if(!imagejpeg($img, $argv[1])){ exit( Wystæpiđ bđæd podczas zapisu pliku {$argv[1]}. ); } echo Operacja zmiany kontrastu zakoēczona sukcesem! ; imagedestroy($img); ? Skalowanie W celu przeskalowania obrazu do zadanych rozmiarów moĪna uĪyü funkcji imageco- pyresized lub imagecopyresampled. W rzeczywistoĞci pobierają one okreĞlony para- metrami wycinek z obrazu Ĩródáowego i wstawiają go w miejsce obrazu docelowego (równieĪ okreĞlone parametrami). JeĞli wyznaczone obszary obrazu Ĩródáowego i do- celowego nie bĊdą takie same, nastąpi odpowiednie przeskalowanie. RóĪnica pomiĊdzy imagecopyresized a imagecopyresampled jest taka, Īe druga z nich podczas skalowa- nia dokonuje interpolacji pikseli, dziĊki czemu uzyskuje siĊ dokáadniejszy efekt. Obie funkcje przyjmują identyczne zestawy argumentów, a ich wywoáania mają postaü: imagecopyresized($obraz_docelowy, $obraz_ļródđowy, xd, yd, xs, ys, wd, hd, ws, hs); imagecopyresampled($obraz_docelowy, $obraz_ļródđowy, xd, yd, xs, ys, wd, hd, ws, hs); gdzie:  $obraz_docelowy — okreĞla obraz docelowy,  $obraz_ļródđowy — okreĞla obraz Ĩródáowy,  xd — wspóárzĊdna x lewego górnego rogu kopiowanego obszaru w obrazie docelowym, 336 PHP5. Praktyczny kurs  yd — wspóárzĊdna y lewego górnego rogu kopiowanego obszaru w obrazie docelowym,  xs — wspóárzĊdna x lewego górnego rogu kopiowanego obszaru w obrazie Ĩródáowym,  ys — wspóárzĊdna y lewego górnego rogu kopiowanego obszaru w obrazie Ĩródáowym,  wd — szerokoĞü kopiowanego obszaru w obrazie docelowym,  hd — wysokoĞü
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP 5. Praktyczny kurs. Wydanie II
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: