Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie wykresów
Forum PHP.pl > Forum > Gotowe rozwiązania
arti1
Mam taki kod mający za zadanie generować wykres słupkowy i wyświetlać go na stronie, jednak coś nie działa. Chciałbym aby wykres sie pokazal na stronie, a od razu po wejsciu na strone zostaje on pobierany i zapisywany do pliku. Czy ktoś widzi jakiś błąd?

[php:1:1da7d460b8]<?php


//określ parametry wykresu
$GraphWidth = 400;
$GraphHeight = 200;
$GraphScale = 2;
$GraphFont = 5;
$GraphData = array("99", "75",
"15", "66", "22");
$GraphLabel = array("Wołowina", "Kurczak",
"Wieprzowina", "Jagnięcina", "Ryby");


//stwórz rysunek
$image = imagecreate($GraphWidth, $GraphHeight);

//przydziel kolory
$colorBody = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$colorGrid = imagecolorallocate($image, 0xCC, 0xCC, 0xCC);
$colorBar = imagecolorallocate($image, 0xFF, 0x00, 0x00);
$colorText = imagecolorallocate($image, 0x00, 0x00, 0x00);


//wypełnij tło wykresu
imagefill($image, 0, 0, $colorBody);

//narysuj pionową linię skali
$GridLabelWidth = imagefontwidth($GraphFont)*3 + 1;
imageline($image,
$GridLabelWidth, 0,
$GridLabelWidth, $GraphHeight-1,
$colorGrid);


//narysuj poziome linie skali
for($index = 0; $index < $GraphHeight; $index += $GraphHeight/10)
{
imagedashedline($image,
0, $index,
$GraphWidth-1, $index,
$colorGrid);

//wyświetl etykietę
imagestring($image,
$GraphFont,
0,
$index,
round(($GraphHeight - $index)/$GraphScale),
$colorText);
}

//narysuj dolną linię
imageline($image,
0, $GraphHeight-1,
$GraphWidth-1, $GraphHeight-1,
$colorGrid);

//narysuj każdy słupek
$BarWidth = (($GraphWidth-$GridLabelWidth)/count($GraphData)) - 10;
for($index = 0; $index < count($GraphData); $index++)
{
//słupek
$BarTopX = $GridLabelWidth + (($index+1) * 10) + ($index * $BarWidth);
$BarBottomX = $BarTopX + $BarWidth;
$BarBottomY = $GraphHeight-1;
$BarTopY = $BarBottomY - ($GraphData[$index] * $GraphScale);

imagefilledrectangle($image,
$BarTopX, $BarTopY,
$BarBottomX, $BarBottomY,
$colorBar);

//wyświetl etykietę
$LabelX = $BarTopX +
(($BarBottomX - $BarTopX)/2) -
(imagefontheight($GraphFont)/2);
$LabelY = $BarBottomY-10;

imagestringup($image,
$GraphFont,
$LabelX,
$LabelY,
"$GraphLabel[$index]: $GraphData[$index]",
$colorText);

}

//prześlij obrazek do przeglądarki
header("Content-type: image/gif");
imagegif($image);


?>[/php:1:1da7d460b8]
Bakus
Twoja linijka 94: imagegif($image);
Masz GD w wersji 1.3 lub starszej? Nowsze wersje tej biblioteki (niż 1.3) nie obsługują formatu GIF w związku z umową licencyjną nałożoną na ten format ...

Może zamiast pisać taki skrypt od podstaw zainteresui się klasą JPGraph...

Strona projektu: http://www.aditus.nu/jpgraph/
Download: http://www.aditus.nu/jpgraph/jpdownload.php

P.S. Ja już z powodzeniem używam tej klasy do generowania np. statystyk z Diablo... (do generowania obrazka użyłem 64 linijek kodu w których mam również obsługę bazy danych i różnych dodatkowych aspektów, jak mnogość danych do wyświetlenia...)

Przykład: http://idn.myftp.org/forum.php.pl/diablo.png
enceladus
Fajny ten jpgraph - tylko licencja trochę bolesna - znacie może coś co jest freeware albo LGPL. Nie musi być tak wypasione - wystarczy, że potrafi skalować wykresy.
Bakus
Z tego co pamiętam jest wersja free o mniej restrykcyjnej licencji...
WhiteFang
Polecam PHPLot (do zassania TUTAJ).
Skrypt ten umozliwia generowanie roznego rodzaju wykresow. Od prostych - slupkowych pionowych, poziomych... konczac na KOLOWYCH!!

Goraco polecam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.