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

Generowanie grafiki w PHP

Przykład 3. Generowanie wykresów w PHP

Z użyciem wymienionych wyżej funkcji możemy zabezpieczyć obrazek znakiem wodnym nakładając na niego tekst dowolnej treści, napisany w dowolny sposób lub nakładając na niego inny umieszczony w konkretnej jego części. Zajmiemy się teraz czymś ambitniejszym, napiszemy funkcję która wygeneruje wykres wg. podanych danych.

Listing 3. Generowanie wykresów w PHP

<?php
function gen_wykres($dane, $width = 500, $height = 250, $dist = 10, $tlo = 'grad.jpg', $font = 'verdana.ttf')
{
 $wykres = imagecreatetruecolor($width, $height);
 $bcg_image = imagecreatefromjpeg($tlo);
 $background = imagecolorat($bcg_image, 0, imagesy($bcg_image) - 1);

 imagefill($wykres, 0, 0, $background);
 imagecopyresampled($wykres, $bcg_image, 0, 0, 0, 0, $width, imagesy($bcg_image), imagesx($bcg_image), imagesy($bcg_image));

 $count_all = array_sum($dane);
 $max = max($dane);
 $el_width = round(($width - $dist) / count($dane));
 $mnoznik = ($height - ($dist * 2)) / $max;

 foreach ($dane as $key => $value)
 {
  $col = round(255 - (150 / count($dane)) * $i);
  $colors[$key] = imagecolorallocate($wykres, $col, 200, 0);
  $text_color[$key] = imagecolorallocate($wykres, 0, 0, 0);

  $top = $height - ($dist) - $value * $mnoznik;
  $left = $i * $el_width + $dist;

  imagefilledrectangle($wykres, $left, $top, $left + $el_width - $dist, $height - $dist, $colors[$key]);
  imagettftext($wykres, 10, 90, $left + $el_width / 2, $height - $dist - 2, $text_color[$key], $font, $key.' - '.round($value * 100 / $count_all, 2).' %');

  $i++;
 }

 return $wykres;
}

Funkcję należy wywołać w sposób przedstawiony poniżej:

header('Content-Type: image/png');

$dane['Styczen'] = 5000;
$dane['Luty'] = 6000;
$dane['Marzec'] = 9000;
$dane['Kwiecien'] = 8500;
$dane['Maj'] = 8000;
$dane['Czerwiec'] = 7500;
$dane['Lipiec'] = 7100;
$dane['Sierpien'] = 6800;
$dane['Wrzesien'] = 6100;
$dane['Pazdziernik'] = 7800;
$dane['Listopad'] = 8200;
$dane['Grudzien'] = 7600;

$wykres = gen_wykres($dane);
imagepng($wykres);

Listing 3. Omówienie kodu

Funkcja którą napisaliśmy przyjmuje w sumie 6 argumentów, obowiązkowy jednak jest tylko jeden - tablica zawierająca dane do przedstawienia.

gen_wykres()

Lista argumentów przyjmowanych przez funkcję:

  • $dane tablica zawierająca dane do przedstawienia - jedyny wymagany argument
  • $width szerokość wykresu
  • $height wysokość wykresu
  • $dist odległości między słupkami oraz słupków od krawędzi wykresu
  • $tlo gradient będący tłem dla naszego wykresu, jest on rozciągany na całą jego szerokość, wysokość natomiast pozostaje bez zmian. W sytuacji kiedy wysokość wykresu jest większa niż wysokość gradientu, pozostała jego część zostanie zamalowana kolorem pobranym z ostatniego piksela gradientu.
  • $font ścieżka do czcionki używanej w opisach słupków

Podczas pisania wykorzystywaliśmy oczywiście funkcje dostarczane przez GD, większość z nich została omówiona wcześniej, omówię więc tylko dwie: imagecolorat() i imagefilledrectangle()

imagecolorat()

Zwraca index koloru piksela o podanych współrzędnych. Z funkcji korzystaliśmy dla określenia koloru najniższego piksela gradientu stanowiącego tło generowanego wykresu. Parametry:

  • $image uchwyt obrazka
  • $x, $y współrzędne piksela
imagefill()

Zamalowuje wybrany obszar. Parametry:

  • $image uchwyt obrazka
  • $x współrzędna X punktu początkowego
  • $y współrzędne Y punktu początkowego
  • $color index koloru dla wypełnienia (patrz: imagecolorat() )
imagefilledrectangle()

Rysuje prostokąt, od funkcji imagerectangle() różni się tym, że w przypadku tej drugiej nie będzie on wypełniony. Parametry:

  • $image uchwyt obrazka
  • $x1, $y1 współrzędne pierwszego punktu
  • $x2, $y2 współrzędne drugiego punktu
  • $color index koloru dla wypełnienia (patrz: imagecolorat())

Nie widzę sensu omawiania każdego kawałka kodu po kolei, są to standardowe funkcje PHP które każdy powinien znać i kilka prostych obliczeń matematycznych które opanowuje się w szkole podstawowej. Przejdźmy zatem do przedstawienia działania kodu.

Listing 3. Wynik działania kodu

Wywołanie: $wykres = gen_wykres($dane)

Wywołanie: $wykres = gen_wykres($dane, 600, 180, 10)

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkownikó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-2017 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System