Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!
Wyszukiwarka

Wyszukiwarka

Aby odnaleźć interesujące Cię informacje wpisz poniżej szukane frazy:
Logowanie

Logowanie

Zaloguj się aby zobaczyć swój profil:

Generowanie grafiki w PHP

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.

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 uzytkowników: (3)
porównanie bibliotek
Wtorek 22 Luty 2011 5:15:46 pm - siutek <siutek_at_gmail.com>

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.

problem z wykresem
Poniedziałek 03 Styczeń 2011 7:17:11 pm - kroolic

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

Przykład 3. Generowanie wykresów w PHP
Poniedziałek 03 Styczeń 2011 5:01:00 pm - kroolic <kroolic_at_op.pl>

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

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System