CompZone.Org :: Artykuły :: PHP
Pytania w drugiej edycji Testu PHP powinny być:
Trudniejsze
Łatwiejsze
Skomplikowane
Na myślenie
Do liczenia
Sonda Wyniki

Add to Google

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:

  1. Utworzenie płótna obrazu, na którym będziemy operować - jest to fragment pamięci serwera, na której skrypt będzie operował.
  2. Rysowanie obrazu na płótnie.
  3. Przesłanie obrazu do przeglądarki.
  4. 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.

 <?php
// 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:

 <?php
//...
$szary = ImageColorAllocate($obraz,204,204,204);
$niebieski = ImageColorAllocate($obraz,0,0,255);
//...
?>

Funkcja ImageColorAllocate(), jak widzimy, wymaga czterech argumentów:

  1. Identyfikatora płótna
  2. 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:

 <?php
//...
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:

 <?php
//...
ImageJPEG($obraz);
//...
?>

Funkcja ta wymaga jedynie identyfikatora płótna. Jeśli chcemy jednak zapisać obraz na dysku dodajemy tylko jako drugi argument nazwę pliku

 <?php
//...
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:

 <?php
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:

 <?php
// 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:

 <?php
//...
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:

 <?php
//...
ImageArc($obraz, 150,65,70,70,0,360, $niebieski);
//...
?>

Prostokąty rysujemy za pomocą funkcji:

 <?php
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.

 <?php
ImageRectangle($obraz, 10,65,150,140, $niebieski);
?>

Źródło: [książka] PHP4 od podstaw

Fixus @ 11-07-2006 21:08
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!