Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem z funkcją imagecreateTrueColor()
henio
post 17.08.2007, 14:53:52
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. <?php
  2. /*********************************************
  3.   Zapytanie bazy danych odczytujące wynik ankiety
  4. *********************************************/
  5. include("admin/funkcje.php");
  6. include("admin/baza.php");
  7.  
  8. // pobranie głosu z formy
  9. @$glos=@$_REQUEST['glos'];
  10.  
  11. if(!empty($glos)) // jeżeli formularz został wypełniony, dodanie głosu
  12. {
  13. $zapytanie="UPDATE sondy_odpowiedzi
  14. set liczba_glosow = liczba_glosow + 1
  15. where odpowiedz = '$glos'";
  16. $wynik = mysqli_query($mysql, $zapytanie) or die('zapytanie: '.$zapytanie.'---blad:'.mysqli_error($mysql));
  17. };
  18.  
  19. // pobranie aktualnych wyników ankiety, niezależnie od faktu głosowania
  20. $zapytanie='select * from sondy_odpowiedzi WHERE id_sonda = ".$id_sonda."';
  21. $wynik = mysqli_query($mysql, $zapytanie) or die('zapytanie: '.$zapytanie.'---blad:'.mysqli_error($mysql));
  22. $ilosc_kandydatow=$wynik->num_rows;
  23.  
  24. // obliczenie całkowitej liczby głosów
  25. $ilosc_glosow=0;
  26. while ($rzad=$wynik->fetch_object())
  27. {
  28. $ilosc_glosow+=$rzad->ilosc_glosow;
  29. }
  30. $wynik->data_seek(0); // wyzerowanie wskaźnika wyniku
  31.  
  32. /*********************************************
  33.   Początkowe obliczenia wykresu
  34. *********************************************/
  35. // ustawienie stałych
  36. putenv('GDFONTPATH=C:WINDOWSFonts');
  37. $szerokosc=500;  //szerokosc obrazka w pikselach - ta zmieści się w rozdzielczości 640x480
  38. $lewy_margines=50; // miejsce pozostawiane po lewej stronie obrazka
  39. $prawy_margines=50; // to samo dla strony prawej
  40. $wysokosc_slupka=40;
  41. $odleglosc_slupkow=$wysokosc_slupka/2;
  42. $czcionka='arial';
  43. $rozmiar_tytulu=16; // w stopniach
  44. $rozmiar_podstawowy=12; // w stopniach
  45. $rozmiar_maly=12; // w stopniach
  46. $wciecie_tekstu=10; //odległość lewych etykiet tekstowych od lewej krawędzi obrazka
  47.  
  48. // ustawienie początkowego punktu rysowania
  49. $x=$lewy_margines+70; //miejsce narysowania bazy wykresu
  50. $y=50; //to samo
  51. $jednostka_slupka=($szerokosc-($x+$prawy_margines))/100; //jeden "stopień" wykresu
  52.  
  53. // obliczenie wysokości wykresu - słupki plus przerwy plus pewien margines
  54. $wysokosc=$ilosc_kandydatow*($wysokosc_slupka+$odleglosc_slupkow)+50;
  55.  
  56. /*********************************************
  57.   Konfiguracja podstawowego obrazka
  58. *********************************************/
  59. // stworzenie pustego kadru
  60. $ob=imagecreateTrueColor($szerokosc, $wysokosc);
  61.  
  62. // Przydzielenie kolorów
  63. $bialy=ImageColorAllocate($ob,255,255,255);
  64. $niebieski=ImageColorAllocate($ob,0,64,128);
  65. $czarny=ImageColorAllocate($ob,0,0,0);
  66. $rozowy=ImageColorAllocate($ob,255,78,243);
  67.  
  68. $kolor_tekstu=$czarny;
  69. $kolor_procentow=$czarny;
  70. $kolor_tla=$bialy;
  71. $kolor_linii=$czarny;
  72. $kolor_slupka=$niebieski;
  73. $kolor_liczb=$rozowy;
  74.  
  75. // stworzenie "kadru" do rysowania
  76. ImageFilledRectangle($ob,0,0,$szerokosc-1,$wysokosc-1,$kolor_tla);
  77.  
  78. // narysowanie konturów wokół kadru
  79. ImageRectangle($ob,0,0,$szerokosc-1,$wysokosc-1,$kolor_linii);
  80.  
  81. // dodanie tytułu
  82. $tytul='Wyniki ankiety';
  83. $wymiary_tytulu=ImageTTFBBox($rozmiar_tytulu, 0, $czcionka, $tytul);
  84. $dlugosc_tytulu=$wymiary_tytulu[2]-$wymiary_tytulu[0];
  85. $wysokosc_tytulu=abs($wymiary_tytulu[7]-$wymiary_tytulu[1]);
  86. $tytul_nad_linia=abs($wymiary_tytulu[7]);
  87. $tytul_x=($szerokosc-$dlugosc_tytulu)/2; // wyśrodkowanie w x
  88. $tytul_y=($y-$wysokosc_tytulu)/2+$tytul_nad_linia; // wyśrodkowanie w y
  89. ImageTTFText($ob, $rozmiar_tytulu, 0, $tytul_x, $tytul_y,
  90.  $kolor_tekstu, $czcionka, $tytul);
  91.  
  92. // narysowanie bazy od nieco ponad pozycją pierwszego słupka do nieco 
  93. // poniżej pozycji ostatniego
  94. ImageLine($ob, $x, $y-5, $x, $wysokosc-15, $kolor_linii);
  95.  
  96. /*********************************************
  97.   Umieszczenie danych na wykresie
  98. *********************************************/
  99. // Pobranie każdej linii bazy danych i narysowanie odpowiadających słupków
  100. while ($rzad=$wynik->fetch_object())
  101. {
  102. if($ilosc_glosow>0)
  103. $procent=intval(round(($rzad->ilosc_glosow/$ilosc_glosow)*100));
  104. else
  105. $procent=0;
  106.  
  107. // wyświetlenie procentów dla tej wartości
  108. $wymiary_procentow=ImageTTFBbox($rozmiar_podstawowy, 0, $czcionka, $procent.'%');
  109. $dlugosc_procentow=$wymiary_procentow[2]-$wymiaryprocentow[0];
  110. ImageTTFText($ob,$rozmiar_podstawowy, 0, $szerokosc-$dlugosc_procentow-$wciecie_tekstu,
  111.  $y+($wysokosc_slupka/2), $kolor_procentow, $czcionka, $procent.'%');
  112.  
  113. // długość słupka dla tej wartości
  114. $dlugosc_slupka=$x+($procent*$jednostka_slupka);
  115.  
  116. // narysowanie słupka dla tej wartości
  117. ImageFilledRectangle($ob, $x, $y-2, $dlugosc_slupka, $y+$wysokosc_slupka, 
  118.  $kolor_slupka);
  119.  
  120. // narysowanie tytułu dla tej wartości
  121. ImageTTFText($ob, $rozmiar_podstawowy, 0, $wciecie_tekstu,  
  122.  $y+($wysokosc_slupka/2), $kolor_tekstu, $czcionka, 
  123.  "$rzad->kandydat");
  124.  
  125. // narysowanie konturu pokazującego 100%
  126. ImageRectangle($ob, $dlugosc_slupka+1, $y-2, ($x+(100*$jednostka_slupka)),
  127.  $y+$wysokosc_slupka, $kolor_linii);
  128.  
  129. // wyświetlenie liczb
  130. ImageTTFText($ob, $rozmiar_maly, 0, $x+(100*$jednostka_slupka)-50, 
  131.  $y+($wysokosc_slupka/2), $kolor_liczb, $czcionka, 
  132.  $rzad->ilosc_glosow.'/'.$ilosc_glosow);
  133.  
  134. // przesunięcie do następnego słupka
  135. $y=$y+($wysokosc_slupka+$odleglosc_slupkow);
  136. }
  137.  
  138. /*********************************************
  139.   Wyświetlenie obrazka
  140. *********************************************/
  141. Header('Content=type: image/png');
  142. ImagePNG($ob);
  143.  
  144. /*********************************************
  145.   Zwalnianie zasobów
  146. *********************************************/
  147. ImageDestroy($ob);
  148. ?>

Mam skrypt, który ma mi tworzyć wykres na podstawie danych z sondy.

Wyskakuje mi taki problem:
Fatal error: Call to undefined function imagecreateTrueColor() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 61

Fatal error: Call to undefined function ImageColorAllocate() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 64

Fatal error: Call to undefined function ImageColorAllocate() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 65

Fatal error: Call to undefined function ImageColorAllocate() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 66

Fatal error: Call to undefined function ImageColorAllocate() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 67

Fatal error: Call to undefined function ImageFilledRectangle() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 77

Fatal error: Call to undefined function ImageRectangle() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 80

Fatal error: Call to undefined function ImageTTFBBox() in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 84

Ten post edytował henio 17.08.2007, 14:58:00
Go to the top of the page
+Quote Post
Hazel
post 17.08.2007, 15:01:09
Post #2





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


blinksmiley.gif

Nie masz zainstalowanej biblioteki GD/GD2.
Możesz ją ściągnąć stąd.
Możliwe też, że w pliku php.ini nie usunąłeś średnika z początku wiersza ;extension=php_gd2.dll
Zrób to i zrestartuj serwer.

Ten post edytował Hazel 17.08.2007, 15:03:06


--------------------
Go to the top of the page
+Quote Post
henio
post 17.08.2007, 16:09:41
Post #3





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Juz to poprawiłem.Teraz mam inny błąd:
  1. <?php
  2. /*********************************************
  3.   Zapytanie bazy danych odczytujące wynik ankiety
  4. *********************************************/
  5. include("admin/funkcje.php");
  6. include("admin/baza.php");
  7.  
  8. // pobranie głosu z formy
  9. @$glos=@$_REQUEST['glos'];
  10.  
  11. if(!empty($glos)) // jeżeli formularz został wypełniony, dodanie głosu
  12. {
  13. $zapytanie="UPDATE sondy_odpowiedzi
  14. set liczba_glosow = liczba_glosow + 1
  15. where odpowiedz = '$glos'";
  16. $wynik = mysqli_query($mysql, $zapytanie) or die('zapytanie: '.$zapytanie.'---blad:'.mysqli_error($mysql));
  17. };
  18.  
  19. // pobranie aktualnych wyników ankiety, niezależnie od faktu głosowania
  20. $zapytanie='select * from sondy ORDER BY id_sonda ASC LIMIT 0,1';
  21. $wynik1 = mysqli_query($mysql, $zapytanie) or die('zapytanie: '.$zapytanie.'---blad:'.mysqli_error($mysql));
  22. while ($wynik1 && $rekord = mysqli_fetch_assoc($wynik1))
  23. {
  24. $zapytanie="select * from sondy_odpowiedzi WHERE id_sonda = ".$rekord['id_sonda']."";
  25. }
  26. $wynik = mysqli_query($mysql, $zapytanie) or die('zapytanie: '.$zapytanie.'---blad:'.mysqli_error($mysql));
  27. $ilosc_kandydatow=$wynik->num_rows;
  28.  
  29. // obliczenie całkowitej liczby głosów
  30. $ilosc_glosow=0;
  31. while ($rzad=$wynik->fetch_object())
  32. {
  33. $ilosc_glosow+=$rzad->liczba_glosow;
  34. }
  35. $wynik->data_seek(0); // wyzerowanie wskaźnika wyniku
  36.  
  37. /*********************************************
  38.   Początkowe obliczenia wykresu
  39. *********************************************/
  40. // ustawienie stałych
  41. putenv('GDFONTPATH=C:WINDOWSFonts');
  42. $szerokosc=500;  //szerokosc obrazka w pikselach - ta zmieści się w rozdzielczości 640x480
  43. $lewy_margines=50; // miejsce pozostawiane po lewej stronie obrazka
  44. $prawy_margines=50; // to samo dla strony prawej
  45. $wysokosc_slupka=40;
  46. $odleglosc_slupkow=$wysokosc_slupka/2;
  47. $czcionka='arial';
  48. $rozmiar_tytulu=16; // w stopniach
  49. $rozmiar_podstawowy=12; // w stopniach
  50. $rozmiar_maly=12; // w stopniach
  51. $wciecie_tekstu=10; //odległość lewych etykiet tekstowych od lewej krawędzi obrazka
  52.  
  53. // ustawienie początkowego punktu rysowania
  54. $x=$lewy_margines+70; //miejsce narysowania bazy wykresu
  55. $y=50; //to samo
  56. $jednostka_slupka=($szerokosc-($x+$prawy_margines))/100; //jeden "stopień" wykresu
  57.  
  58. // obliczenie wysokości wykresu - słupki plus przerwy plus pewien margines
  59. $wysokosc=$ilosc_kandydatow*($wysokosc_slupka+$odleglosc_slupkow)+50;
  60.  
  61. /*********************************************
  62.   Konfiguracja podstawowego obrazka
  63. *********************************************/
  64. // stworzenie pustego kadru
  65. $ob=imagecreateTrueColor($szerokosc, $wysokosc);
  66.  
  67. // Przydzielenie kolorów
  68. $bialy=ImageColorAllocate($ob,255,255,255);
  69. $niebieski=ImageColorAllocate($ob,0,64,128);
  70. $czarny=ImageColorAllocate($ob,0,0,0);
  71. $rozowy=ImageColorAllocate($ob,255,78,243);
  72.  
  73. $kolor_tekstu=$czarny;
  74. $kolor_procentow=$czarny;
  75. $kolor_tla=$bialy;
  76. $kolor_linii=$czarny;
  77. $kolor_slupka=$niebieski;
  78. $kolor_liczb=$rozowy;
  79.  
  80. // stworzenie "kadru" do rysowania
  81.  
  82. ImageFilledRectangle($ob,0,0,$szerokosc-1,$wysokosc-1,$kolor_tla);
  83.  
  84. // narysowanie konturów wokół kadru
  85. ImageRectangle($ob,0,0,$szerokosc-1,$wysokosc-1,$kolor_linii);
  86.  
  87. // dodanie tytułu
  88. $tytul='Wyniki ankiety';
  89. $wymiary_tytulu=ImageTTFBBox($rozmiar_tytulu, 0, $czcionka, $tytul);
  90. $dlugosc_tytulu=$wymiary_tytulu[2]-$wymiary_tytulu[0];
  91. $wysokosc_tytulu=abs($wymiary_tytulu[7]-$wymiary_tytulu[1]);
  92. $tytul_nad_linia=abs($wymiary_tytulu[7]);
  93. $tytul_x=($szerokosc-$dlugosc_tytulu)/2; // wyśrodkowanie w x
  94. $tytul_y=($y-$wysokosc_tytulu)/2+$tytul_nad_linia; // wyśrodkowanie w y
  95. ImageTTFText($ob, $rozmiar_tytulu, 0, $tytul_x, $tytul_y,
  96.  $kolor_tekstu, $czcionka, $tytul);
  97.  
  98. // narysowanie bazy od nieco ponad pozycją pierwszego słupka do nieco 
  99. // poniżej pozycji ostatniego
  100. ImageLine($ob, $x, $y-5, $x, $wysokosc-15, $kolor_linii);
  101.  
  102. /*********************************************
  103.   Umieszczenie danych na wykresie
  104. *********************************************/
  105. // Pobranie każdej linii bazy danych i narysowanie odpowiadających słupków
  106. while ($rzad=$wynik->fetch_object())
  107. {
  108. if($ilosc_glosow>0)
  109. $procent=intval(round(($rzad->liczba_glosow/$ilosc_glosow)*100));
  110. else
  111. $procent=0;
  112.  
  113. // wyświetlenie procentów dla tej wartości
  114. $wymiary_procentow = ImageTTFBbox($rozmiar_podstawowy, 0, $czcionka, $procent.'%');
  115. $dlugosc_procentow=$wymiary_procentow[2]-$wymiaryprocentow[0];
  116. ImageTTFText($ob,$rozmiar_podstawowy, 0, $szerokosc-$dlugosc_procentow-$wciecie_tekstu,
  117.  $y+($wysokosc_slupka/2), $kolor_procentow, $czcionka, $procent.'%');
  118.  
  119. // długość słupka dla tej wartości
  120. $dlugosc_slupka=$x+($procent*$jednostka_slupka);
  121.  
  122. // narysowanie słupka dla tej wartości
  123. ImageFilledRectangle($ob, $x, $y-2, $dlugosc_slupka, $y+$wysokosc_slupka, 
  124.  $kolor_slupka);
  125.  
  126. // narysowanie tytułu dla tej wartości
  127. ImageTTFText($ob, $rozmiar_podstawowy, 0, $wciecie_tekstu,  
  128.  $y+($wysokosc_slupka/2), $kolor_tekstu, $czcionka, 
  129.  "$rzad->odpowiedz");
  130.  
  131. // narysowanie konturu pokazującego 100%
  132. ImageRectangle($ob, $dlugosc_slupka+1, $y-2, ($x+(100*$jednostka_slupka)),
  133.  $y+$wysokosc_slupka, $kolor_linii);
  134.  
  135. // wyświetlenie liczb
  136. ImageTTFText($ob, $rozmiar_maly, 0, $x+(100*$jednostka_slupka)-50, 
  137.  $y+($wysokosc_slupka/2), $kolor_liczb, $czcionka, 
  138.  $rzad->liczba_glosow.'/'.$ilosc_glosow);
  139.  
  140. // przesunięcie do następnego słupka
  141. $y=$y+($wysokosc_slupka+$odleglosc_slupkow);
  142. }
  143.  
  144. /*********************************************
  145.   Wyświetlenie obrazka
  146. *********************************************/
  147. Header('Content=type: image/png');
  148. ImagePNG($ob);
  149.  
  150. /*********************************************
  151.   Zwalnianie zasobów
  152. *********************************************/
  153. ImageDestroy($ob);
  154. ?>


Wyświetla mi się:
Notice: Undefined variable: wymiaryprocentow in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 116

Notice: Undefined variable: wymiaryprocentow in C:\Program Files\Apache Group\Apache2\htdocs\stronka\pokaz_wyniki.php on line 116

‰PNG  IHDRôŞÔG*îIDATxśíÝPSgşđç$!PÄQHşJ)EŻ…Ąu¤)e[ÇéŘÔ›ŞĂRë&micro;-ø\Ę*›F†MÝiËzŐŮYĆëli‡­”eą”:n–rť ‹TYth 5P.¨d34„śűÇYĎ&brvbar;AC‚ňĂ×ď篓÷}óľgŕ›—“!ćpDÄóüL—÷ Çq’™&reg;î?„;ƒî B¸0áŔ „;ƒî B¸0áŔ „;ƒî B¸0áŔ „;ƒîŕ‡W_}•㸏>úČŁýÍ7ßä8N*• xt&copy;Őꀀ€ÁÁÁ{
Takich znaczków jest trochę więcej niż tu napisalem

Jeden błąd już wyłapałem i poprawiłem. Chodzi mi o ten z nagłówkiem. Jednak nadal sąte dziwne znaczki i problem z zmienną $wymiaryprocentow

P.S. Już poprawiłem

Ten post edytował henio 17.08.2007, 16:21:39
Go to the top of the page
+Quote Post
Hazel
post 17.08.2007, 16:16:19
Post #4





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


W linii 116 masz:
$dlugosc_procentow=$wymiary_procentow[2]-$wymiaryprocentow[0];
Zauważ, że Twoja tablica nazywa się $wymiary_procentow, a nie $wymianyprocentow... biggrin.gif
I radziłbym na przyszłość unikać takich nazw...
A te krzaczki robią się właśnie z tego powodu - wywołuje je funkcja ImagePNG, jeśli nie może wygenerować obrazka z powodu błędu we wcześniejszej części skryptu.
Spróbuj sobie użyć ImagePNG na jakiejś dowolnej zmiennej, to zobaczysz.

Ten post edytował Hazel 17.08.2007, 16:40:54


--------------------
Go to the top of the page
+Quote Post
henio
post 17.08.2007, 17:28:54
Post #5





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(Hazel @ 17.08.2007, 15:16:19 ) *
W linii 116 masz:
$dlugosc_procentow=$wymiary_procentow[2]-$wymiaryprocentow[0];
Zauważ, że Twoja tablica nazywa się $wymiary_procentow, a nie $wymianyprocentow... biggrin.gif
I radziłbym na przyszłość unikać takich nazw...
A te krzaczki robią się właśnie z tego powodu - wywołuje je funkcja ImagePNG, jeśli nie może wygenerować obrazka z powodu błędu we wcześniejszej części skryptu.
Spróbuj sobie użyć ImagePNG na jakiejś dowolnej zmiennej, to zobaczysz.

Wielkie dzięki. Ale ja byłem głupi, że tego nie zauważyłem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 21:35