Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: biblioteka GD
Forum PHP.pl > Forum > Gotowe rozwiązania
mhs
Witam.

Mam nastepujace pytania:

Uzylem ostatnio biblioteki GD do stworzenia skryptu wyswietlajacego wyniki ankiety pobierane z bazy danych. Niestety gdy przychodzi do wyswietlenia tresci pytania to polskie znaki nie sa poprawnie wyswietlane. Nie wiem gdzie lezy blad gdyz probowalem wyswietlic to za pomoca kilku czcionek dostepnych w systemie Windows i nic. Dodam, ze w momencie gdy chce wyswietlic dana tresc pytania w przegladarce (bez uzycia biblioteki GD) to wszystko wyswietlane jest poprawnie. Jaka jest tego przyczyna??

Pytanie drugie. Mam problem z wyswietleniem wielu obrazkow na jednej stronie. Poniewaz dla danej ankiety moze byc wiele pytan i wiele odpowiedzi chcialbym przy jednym wywolaniu wyswietlic wszystkie pytania (a co za tym idzie wiele odpowiedzi).


Ponizej zamieszczam kod:


kod funkcji tworzacej obrazek
[php:1:5335ceb229]<?php
function grafika($wynik, $tekst) {

$alfabet = array("a)", "B)", "c)", "d)", "e)", "f)", "g)", "h)", "i)", "j)", "k)", "l)", "m)", "n)", "o)", "p)", "r)", "s)", "t)");

### USTAWIENIE PARAMETROW OBRAZKA

$liczba_wynikow = count($wynik); //liczba paskow poziomych wyswietlanych z bazy danych;

$tekst_wysokosc = 25; //wysokosc tekstu naglowkowego

$pasek_wykresu = 20; //grubosc paska


$separator_wierszy = 10; //odstep pomiedzy paskami

$margines_gora = 20; //odstep pomiedzy tytulem a poczatkiem wykresu
$margines_dol = 20; //odstep pomiedzy koncem wykresu a koncem rysunku


$margines_lewy = 30; //margines przeznaczony np. na tekst;
$margines_prawy = 60; //margines przeznaczony np. na procenty;

$szerokosc = $margines_lewy + $margines_prawy + 410;

$wysokosc = $tekst_wysokosc +
$margines_gora +
$margines_dol +
$liczba_wynikow * $pasek_wykresu +
($liczba_wynikow - 1) * $separator_wierszy;

# TWORZENIE RYSUNKU
//utworzenie plotna
$obrazek = imageCreate($szerokosc, $wysokosc);

### ALOKACJA KOLOROW
$bialy = ImageColorAllocate($obrazek, 255, 255, 255);
$niebieski = ImageColorAllocate($obrazek, 0, 64, 128);
$czarny = ImageColorAllocate($obrazek, 0, 0, 0);
$rozowy = ImageColorAllocate($obrazek, 255, 78, 243);
$zolty = ImageColorAllocate($obrazek, 255, 255, 128);
$szary = ImageColorAllocate($obrazek, 215, 215, 215);
$czerwony = ImageColorAllocate($obrazek, 255, 0, 0);

### ELEMENTY FORMATUJACE OBRAZ
$tlo = $szary;

$obramowanie_kolor = $czerwony;

$tekst_czcionka = "tahoma.ttf";

$tekst_pasek_kolor = $bialy;
$tekst_punktacja_kolor = $niebieski;
$tekst_wartosci_kolor = $czerwony;
$tekst_procenty_kolor = $czerwony;

$obramowanie_pasek_kolor = $bialy;

$linia_pionowa_kolor = $bialy;

$pasek_kolor = $niebieski;

//utworzenie plotna
ImageFilledRectangle($obrazek, 0, 0, $szerokosc, $wysokosc, $tlo);


//obramowanie rysunku
ImageRectangle($obrazek, 0, 0, $szerokosc - 1, $wysokosc - 1, $obramowanie_kolor);


//pasek
ImageFilledRectangle($obrazek, 1, 1, $szerokosc - 2, $tekst_wysokosc, $pasek_kolor);

//linia pionowa - podstawa rysunku
ImageLine($obrazek, $margines_lewy, ($tekst_wysokosc + $margines_gora) - 3, $margines_lewy, $wysokosc - ($margines_gora) + 3, $linia_pionowa_kolor);



//sumuje wartosci poszczegolnych wyniki otrzymanych winksmiley.jpg
$suma = 0;
for ($i = 0; $i < count($wynik); $i++)
$suma +=$wynik[$i];

### tutaj zrobic to #### !!!!!! - ladnie zapisac

for ($i = 0; $i < count($wynik); $i++) {
ImageRectangle($obrazek,
$margines_lewy,
($i + 1) * $margines_gora + $tekst_wysokosc + $separator_wierszy * $i,
$margines_prawy + ($szerokosc - $margines_prawy - $margines_prawy),
($i + 1) * $margines_gora + $pasek_wykresu + $tekst_wysokosc + $separator_wierszy * $i,
$obramowanie_pasek_kolor);
}

//wyliczam szerokosc paska odpowiadajacego 100 procentom
$szerokosc_paska = $szerokosc - $margines_lewy - $margines_prawy;



$temp = 0;
for ($i = 0; $i < count($wynik); $i++) {

$procent = 0;

if ($wynik[$i] != 0) {
$procent = $wynik[$i] / $suma;
$temp = intval(round($procent * $szerokosc_paska));

ImageFilledRectangle($obrazek,
$margines_lewy + 1,
($i + 1) * $margines_gora + $tekst_wysokosc + 1 + $separator_wierszy * $i,
$margines_lewy + $temp - 1,//tutaj sprawdzic jeszcze to czy jest ok
($i + 1) * $margines_gora + $pasek_wykresu - 1 + $tekst_wysokosc + $separator_wierszy * $i,
$niebieski);
}

//wyswietlam kolejne litery alfabetu
ImageTTFText($obrazek, 10, 0, 10, ($i * 20) + 60 + $separator_wierszy * $i, $tekst_punktacja_kolor, $tekst_czcionka, $alfabet[$i]);

//wyswietlam etykiete ilosciowa: liczba odpowiedzi na dana opcje / calkowita ilosc odpowiedzi
ImageTTFText ($obrazek, 10, 0, $szerokosc - 115, ($i * 20) + 60 + $separator_wierszy * $i, $tekst_wartosci_kolor, $tekst_czcionka, $wynik[$i]."/".$suma);

//wyswietlam ilosc procent
ImageTTFText ($obrazek, 10, 0, $szerokosc - 56, ($i * 20) + 60 + $separator_wierszy * $i, $tekst_procenty_kolor, $tekst_czcionka, round(($procent * 100), 2)."%");
}


//$tekst = "To jest testowy tekst, który zostanie wyświetlony na pasku tytułowym obrazka.";

ImageTTFText ($obrazek, 10, 0, 10, 17, $bialy, $tekst_czcionka, $tekst);

return $obrazek;
}

?>[/php:1:5335ceb229]

oto kod pobierajacy dane z bazy oraz wyswietlajacy rysunek

[php:1:5335ceb229]<?php
session_start();
include("inc/funkcje_paczka.php");
include("test.php");




$smarty = new Smarty;

$baza = new classMySQL();
$baza2 = new classMySQL();
$baza3 = new classMySQL();

$baza->polaczenieOtworz();
$baza2->polaczenieOtworz();
$baza3->polaczenieOtworz();

#1 wyswietlam wszystkie ankiety
$zapytanie = "SELECT ankieta_id, ankieta_nazwa FROM ankiety ORDER BY ankieta_start DESC";
$baza->zapytanieWyslij($zapytanie);

$i = 0;
while ($wiersz = $baza->pobierzTabliceAsocjacyjna()) {
$id[$i] = $wiersz['ankieta_id'];
$nazwa[$i] = $wiersz['ankieta_nazwa'];
$i++;
}


$smarty->assign('ile', $i);
$smarty->assign('id', $id);
$smarty->assign('nazwa', $nazwa);
#1 koniec




/* JEZELI ZOSTALO PRZEKAZANE ID ANKIETY */
if ($_GET[ankieta]) {
#2 pobieram wszystkie pytania przekazane za pomoca zmiennej GET
$zapytanie = "SELECT pytanie_id, pytanie_tresc FROM pytania WHERE ankieta_id = '".$_GET[ankieta]."'";
$baza->zapytanieWyslij($zapytanie);

$d = 0;
//pobieram wszystkie odpowiedzi dla danego pytania;
while ($wiersz = $baza->pobierzTabliceAsocjacyjna()) {
$pytanie = $wiersz['pytanie_id'];
$pytanie_tresc = $wiersz['pytanie_tresc'];


$zapytanie_2 = "SELECT odpowiedz_id, odpowiedz_tresc FROM odpowiedzi WHERE pytanie_id = '".$pytanie."'";
$baza2->zapytanieWyslij($zapytanie_2);

$j = 0;
while ($wiersz_2 = $baza2->pobierzTabliceAsocjacyjna()) {
$zapytanie_3 = "SELECT COUNT(*) FROM glosujacy_odpowiedzi WHERE odpowiedz_id = '".$wiersz_2['odpowiedz_id']."'";
$baza3->zapytanieWyslij($zapytanie_3);
$wiersz_3 = $baza3->pobierzTabliceAsocjacyjna();

$wynik[$j] = $wiersz_3['COUNT(*)'];
$txt = $wiersz['pytanie_tresc'];

$j++;
}

//gotowe rysunki przechowuje w tablicy z ktorej nastepnie wyswietlam na stronie questionmark.gif
$temp[$d] = grafika($wynik, $txt);

$d++;

unset($wynik);
}

//proba wyswietlenia wszystkich obrazkow sad.gif
for ($i = 0; $i < count($temp); $i++) {
header("Content-type: image/png");
ImagePNG($temp[$i]);
ImageDestroy($temp[$i]);
}

}//koniec: if ($_GET[ankieta])

?>[/php:1:5335ceb229]

I jeszcze jedno pytanie. Wrzucilem caly system na serwer (lycos) w celu przetestowania tego co zrobilem do tej pory i w ogole na ostatecznym rysunku nie wyswietlaja mi sie jakiekolwiek napisy. Jaka jest tego przyczyna??
stoprocent
Wiesz co nie wiem czy przypadkiem gd nie korzysta z czcionek zainstalowanych na serwerze , i tu moze jest problem .
Sproboj to samo na innym serwerze smile.gif
mhs
czcionka z ktorej chce skorzystac jest wrzucona na serwer i jest dostepna...
gdy testuje skrypt na localhost wszystko jest w porzadku...
mhs
poniewaz pewnie nikomu sie nie chce sledzic kodu to problem przedstawie inaczej:


mam funkcje ktora przygotuwuje mi obrazek do wyswietlenia
[php:1:6153f37dd4]<?php
function rysuj($szerokosc, $wysokosc) {

$obrazek = ImageCreate($szerokosc, $wysokosc);

$tlo = ImageColorAllocate($obrazek, 0, 64, 128);

ImageFilledRectangle($obrazek, 0, 0, $szerokosc, $wysokosc, $tlo);

ImagePNG($obrazek);
ImageDestroy($obrazek);
}
?>[/php:1:6153f37dd4]

nastepnie chce na jednej stronie wyswietlic dwa rysunki -> robie cos takiego:

[php:1:6153f37dd4]<?php
header("Content-type: image/png");
rysuj(100, 100);

rysuj(200, 200);

?>[/php:1:6153f37dd4]

niestety w przegladarce wyswietla mi sie tylko jeden obrazek
Moje pytanie brzmi: co jest nie tak? Jak powinienem poprawnie postepowac.
scanner
Musisz dwa razy wywołać skrypt rysujacy, a nie w jednym wywołaniu wysyłać dwa obrazki.
mhs
mozesz mi podac kawalek kodu? bo szcze piszac nie za bardzo rozumiem jak mam to wykonac.
scanner
Zacznij od tego, że dla każdego obrazka musisz wysłać osobny header. Dodatkowo każdy obrazek musisz potraktować jako osobny plik. Czyli tyle razy wywołać skpry generujący, ile obrazków chcesz wywołać...
Kod
<img src="picture.php?szerokosc=100&wysokosc=100">

<br/>

<img src="picture.php?szerokosc=200&wysokosc=200">
mhs
no i wszystko jasne smile.gif

teraz musze sobie jeszcze to ladnie jakos ze Smartami polaczyc i bedzie ok

piekne dzieki
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.