Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z funkcją imagecreateTrueColor()
Forum PHP.pl > Forum > Przedszkole
henio
  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
Hazel
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.
henio
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
Hazel
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.
henio
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.
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.