Język PHP sam w sobie nie pozwala na tworzenie czy manipulowanie grafiką, służą do tego specjalne biblioteki dostarczające zestaw odpowiednich funkcji. Najpopularniejsze z nich to GD i ImageMagick, przy czym ta pierwsza jest częściej dostępna i bardziej popularna, przez co w sieci na jej temat znaleźć można więcej materiałów. Nie są to oczywiście argumenty przemawiające za korzystaniem wyłącznie z tego rozwiązania, w tym artykule jednak skupimy się właśnie na GD i funkcjach przez nią dostarczanych. Zacznijmy może od krótkiego przedstawienia biblioteki - poniższy opis to definicja GD przedstawiana na Wikipedii:
I to w zasadzie tyle, jeżeli kogoś interesuje krótka historia biblioteki zachęcam do zapoznania się z jej anglojęzycznym opisem.
Biblioteki graficzne mają bardzo wiele zastosowań, najczęściej jednak można spotkać się z ich użyciem przy okazji:
Przed rozpoczęciem pracy z GD musimy upewnić się co do jej dostępności. Jeżeli korzystamy z PHP w wersji 5.2.4 lub nowszego aby to sprawdzić posłużymy się STAŁĄ PREDEFINIOWANĄ dostępną w przypadku kiedy rozszerzenie jest włączone:
<?php echo GD_VERSION; ?>
Zwrócenie przez powyższy kod tekstu "GD_VERSION" oznacza, że biblioteka GD jest niedostępna. Jeżeli jest zainstalowana powinniśmy otrzymać numer jej wersji.
Osoby korzystające z PHP w wersji starszej niż 5.2.4 mogą posłużyć się poniższym kodem w celu sprawdzenia dostępności biblioteki:
<?php echo 'Biblioteka GD jest '.(extension_loaded('gd') ? 'dostępna' : 'niedostępna'); ?>
Kiedy już sprawdzimy czy biblioteka jest dostępna warto sprawdzić jej konfigurację, posłuży nam do tego funkcja gd_info() zwracająca tablicę zawierającą informacje dotyczące biblioteki GD.
<?php echo '<pre>'; var_dump(gd_info()); ?>
Powyższy kod w moim przypadku zwraca tak przedstawiającą się tablicę:
array(12) { ["GD Version"]=> string(27) "bundled (2.0.34 compatible)" ["FreeType Support"]=> bool(true) ["FreeType Linkage"]=> string(13) "with freetype" ["T1Lib Support"]=> bool(true) ["GIF Read Support"]=> bool(true) ["GIF Create Support"]=> bool(true) ["JPG Support"]=> bool(true) ["PNG Support"]=> bool(true) ["WBMP Support"]=> bool(true) ["XPM Support"]=> bool(false) ["XBM Support"]=> bool(true) ["JIS-mapped Japanese Font Support"]=> bool(false) }
Mamy czarno na białym napisane jakie formaty wspiera a jakich nie nasza biblioteka, oraz znamy jej wersję.
Musimy przede wszystkim wiedzieć, że GD przechowuje obraz z którym pracujemy w zmiennej typu GD przez co możliwe jest wczytanie obrazu dowolnego typu i zwrócenie go w dowolnej, obsługiwanej przez bibliotekę postaci. Możemy więc wczytać obrazek typu GIF i zwrócić go jako PNG tak jak przedstawia to kod zamieszczony poniżej:
<?php $im = imagecreatefromgif('obrazek.gif'); imagepng($im); ?>
Biblioteka GD pozwala ponadto na zapis pliku na dysku z użyciem tych samych funkcji:
<?php $im = imagecreatefromgif("obrazek.gif"); imagejpeg($im, 'obrazek.jpg', 100); ?>
Trzeci, opcjonalny parametr służy do określenia jakości pliku wynikowego i musi być liczbą z przedziału 0-100 dla pliku typu JPEG lub 0-9 dla plików typu PNG, im niższa jakość tym mniejszy rozmiar pliku wynikowego. Jeżeli jako drugi parametr przekażemy wartość NULL plik zostanie przekazany do przeglądarki w określonej jakości bez jego zapisu.
W zależności od tego jakiego typu obrazek zwracamy do przeglądarki lub zapisujemy na dysku musimy wysłać odpowiedni nagłówek, o tym jak powinny one wyglądać w zależności od typu pliku dowiesz się z poniższej tabelki:
Typ pliku: |
JPG/JPEG |
PNG |
GIF |
BMP |
---|---|---|---|---|
Content-type: |
image/jpeg |
image/png |
image/gif |
image/bmp |
Nagłówek należy wysłać przed wysłaniem czegokolwiek innego do przeglądarki używając następującej funkcji: header('Content-Type: CONTENT-TYPE'); zamieniając CONTENT-TYPE na jeden z zamieszczonych w tabelce.
Bedzie moze jakis artykul w niedalekiej przyszlosci na temat biblioteki ImageMagic?? uzywam obecnie GD, ale slyszalem sporo opinii że IM jest szybsza. Chcialbym poznac wady i zalety obu.
już sobie poradziłem, okazało się że gdy miałem w .htaccess ustawione php_value display_errors 1 , to wtedy pokazuje informacje
Obrazek "http://www.adreswww.pl/wykres.php" nie może zostać wyświetlony, ponieważ zawiera błędy.
ustawienie php_value display_errors 0 , pokazuje wykres, nigdy bym na to nie wpadł, przez przypadek na to trafiłem, pozdrawiam
Kod i artykuł przejrzysty, tego szukałem, tylko jeden problem z artykułem "Przykład 3. Generowanie wykresów w PHP" - chodzi o to że autor nie podał jak ma wyglądać grafika użyta do wykresów i przeglądarka wyrzuca błąd
Obrazek "http://www.strona.pl/kod.php" nie może zostać wyświetlony, ponieważ zawiera błędy.
dziwny błąd, kod na żywca skopiowany z artykułu. Jeśli to możliwe proszę o uzupełnienie artykułu. Dziękuję.