O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!
35
Kategorie

Kategorie

Kategoria wyżej
O autorze

O autorze

Paweł (pawkow) Kowalewski
Reklama

Reklama

Podobne Artykuły

Poniżej znajduje się lista podobnych artykułów:
Brak powiązanych artykułów

Generowanie grafiki w PHP

Od Redakcji: Artykuł ten zajął pierwsze miejsce w konkursie "Doceniamy publicystów 2"

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:

GD jest biblioteką graficzną służącą do dynamicznej manipulacji obrazami. Jej głównym twórcą jest Thomas Boutell. Dzięki niej można tworzyć obrazy w formatach GIF, JPEG, PNG i BMP. GD obsługuje m.in. takie języki programowania jak C, PHP, Perl, OCaml, Tcl, Pascal czy REXX.Biblioteka jest udostępniana na zasadach Open Source.

I to w zasadzie tyle, jeżeli kogoś interesuje krótka historia biblioteki zachęcam do zapoznania się z jej anglojęzycznym opisem.

Zastosowania bibliotek graficznych

Biblioteki graficzne mają bardzo wiele zastosowań, najczęściej jednak można spotkać się z ich użyciem przy okazji:

  • Zabezpieczania formularzy (tzw. captcha)
  • Zmiany rozmiarów obrazków
  • Zabezpieczania zdjęć znakiem wodnym
  • Generowania wykresów
  • Nakładanie filtrów na obrazki
  • Obracania obrazków

Zanim zaczniemy pracę

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ę.

Podstawy

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.

Nagłówki

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.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl    eZ systems    Newcomo   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2006 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System