Generacja grafiki cześć I
Artykuł ten poświęcę na przedstawienie podstaw generowania grafiki za pomocą skryptów php. Zacznę od kilku słów z teorii, następnie pokazania, jak się rysuje linie... Potem zaś przejdziemy do generacji już troszke bardziej złożonej grafiki.
Wiadomości podstawowe
Wszystkie funkcje graficzne realizowane są za pośrednictwem biblioteki GD. Dysponując jedną z ostatnich wersji tej biblioteki mamy możliwość tworzyć obrazy i manipulować nimi za pomocą kilku różnych formatów. Na największą uwagę zasługują tu: JPEG i PNG.
Proces generacji grafiki opiera się na 4 krokach:
- Utworzenie płótna obrazu, na którym będziemy operować - jest to fragment pamięci serwera, na której skrypt będzie operował.
- Rysowanie obrazu na płótnie.
- Przesłanie obrazu do przeglądarki.
- Wyczyszczenie pamięci po przez usunięcie płótna obrazu.
Tworzenie obrazu
Do utworzenie płótna obrazu, na którym będziemy mogli swobodnie działać służy funkcja ImageCreate. Posiada ona dwa atrybuty. Są to: szerokość i wysokość tworzonego obrazu. Funkcja zwraca identyfikator, który określa miejsce jakie w pamięci zajmuje nowy obraz.
![]()
// tworzy to obraz o wymiarach 200 x 200 pikseli
$obraz = ImageCreate(200, 200);
![]()
Aby móc wykorzystać kolory do "malowania" naszego obrazu, musimy je wpierw utworzyć. Wygląda to tak:
![]()
//...
$szary = ImageColorAllocate($obraz,204,204,204);
$niebieski = ImageColorAllocate($obraz,0,0,255);
//...
![]()
Funkcja ImageColorAllocate(), jak widzimy, wymaga czterech argumentów:
- Identyfikatora płótna
- Drugi, trzeci i czwarty argument to trzy składowe tworzonego koloru (barwa czerwona, zielona i niebieska). Wartościami są liczby całkowite z zakresu od 0 do 255.
Rysowanie
Należy nadmienić, że pierwszy z powyżej podanych kolorów automatycznie zostaje przypisany jako kolor tła naszego obrazu. Teraz aby narysować zwykła linie należy wykorzystać funkcję ImageLine:
![]()
//...
ImageLine($obraz, 10,10, 150,30, $niebieski);
//....
![]()
Jak widać, jako pierwszy argument podajemy identyfikator płótna, następnie 2 współrzędne OX i OY (trzeba pamiętać o tym, że PHP odczytuje współrzędne odwrotnie niż ludzie. Otóż wartości nie rosną na skos do góry tylko na skos w dół. Należy o tym pamiętać, jeżeli chcemy mieć rysunek odpowiadający naszym wymaganiom), a na końcu kolor. Powyższy przykład narysuje nam linie w odległości 10 pikseli na prawo i 10 pikseli poniżej lewego, górnego wierzchołka obrazu i kończącej się w punkcie o współrzędnych x = 150 i y = 30.
Po narysowaniu mamy 2 opcje do wyboru. Albo zapisujemy obraz na dysku albo wysyłamy go do przeglądarki. Aby wysłać obraz do przeglądarki wystarczy:
![]()
//...
ImageJPEG($obraz);
//...
![]()
Funkcja ta wymaga jedynie identyfikatora płótna. Jeśli chcemy jednak zapisać obraz na dysku dodajemy tylko jako drugi argument nazwę pliku
![]()
//...
ImageJPEG($obraz, "obraz.jpg");
//...
![]()
Pamiętajmy o tym, że jeżeli zapisujemy obraz na dysku powinniśmy dodać trzeci argument jakim jest liczba całkowita z zakresu -1 do 100 i która odpowiada za jakość wynikowego obrazu JPEG. Pamiętajmy, że im lepsza jakość tym więcej miejsca zajmuje obraz dlatego przeważnie zaleca się ustawienie tego argumentu w okolicy 70.
W tym miejscu należy wspomnieć o zagadnieniu, które jest związane z funkcją Header(). Otóż, gdy wysyłamy informacje, które nie są kodem HTML, należy przekazać wiadomość o tym fakcie, aby przeglądarka była w stanie odpowiednio przetworzyć otrzymanie dane. Funkcję Header() należy wywołać na samym początku skryptu. Pozwala to na utworzenie odpowiednich nagłówków, które pozwalają przeglądarce określić, jaki typ danych do niej zmierza:
![]()
Header("Content-type: image/jpeg");
![]()
Po wszystkich tych zabiegach musimy się zastosować do ostatniego punktu naszej pracy i zniszczyć płótno obrazu. Wykorzystujemy do tego funkcje ImageDestroy
A o to cały nasz przykład:
![]()
// tworzymy nagłówek z danymi dla przeglądarki
Header("content-type: image/jpeg");
// tworzymy płótno
$obraz = ImageCreate(200, 200);
// tworzymy kolory
$szary = ImageColorAllocate($obraz, 204, 204, 204);
$niebieski = ImageColorAllocate($obraz, 0, 0, 255);
// rysujemy linie
ImageLine($obraz, 10,10, 150,30, $niebieski);
// wysyłamy obraz do przeglądarki
ImageJPEG($obraz);
// niszczymy płótno
ImageDestroy($obraz);
![]()
Inne figury
Tu przytoczę tylko, jak należy narysować jakieś konkretne figury. Zacznę od okręgu. Aby go narysować musimy skorzystać z funkcji ImageArc() której postać ogólna wygląda tak:
![]()
//...
ImageArc($identyfikator_płótna, x, y, szerokość, wysokość, początek, koniec, kolor);
//...
![]()
Jak widzimy musimy tu podać dość sporo argumentów. Pierwszy to identyfikator, następne dwa to współrzędne x i y. Współrzędne te określają środek okręgu. Szerokość i wysokość określają nam szerokość i wysokość okręgu ewentualnie elipsy. Punkt początku i końca łuku są określane jako kąt (wyrażone w stopniach), którego wartość 0 wyznaczana jest przez poziomy promień skierowany w prawo (wyznacza godzinę trzecią). Wartości kątów liczone są zgodnie z kierunkiem ruchu wskazówek zegara. Przykładowe koło:
![]()
//...
ImageArc($obraz, 150,65,70,70,0,360, $niebieski);
//...
![]()
Prostokąty rysujemy za pomocą funkcji:
![]()
ImageRectangle($identyfikator, x1, y1, x2, y2, kolor);
![]()
Argumentami tu są: identyfikator płótna, współrzędne OX i OY lewego górnego i prawego dolnego wierzchołka oraz kolor.
![]()
ImageRectangle($obraz, 10,65,150,140, $niebieski);
![]()
Źródło: [książka] PHP4 od podstaw










