Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> biblioteka GD
mhs
post 4.01.2004, 23:40:11
Post #1





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


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??
Go to the top of the page
+Quote Post
stoprocent
post 5.01.2004, 06:42:51
Post #2





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 17.05.2003
Skąd: Kraków , Londyn

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


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
Go to the top of the page
+Quote Post
mhs
post 5.01.2004, 09:36:01
Post #3





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


czcionka z ktorej chce skorzystac jest wrzucona na serwer i jest dostepna...
gdy testuje skrypt na localhost wszystko jest w porzadku...
Go to the top of the page
+Quote Post
mhs
post 8.01.2004, 13:11:30
Post #4





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


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.
Go to the top of the page
+Quote Post
scanner
post 8.01.2004, 13:24:26
Post #5





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Musisz dwa razy wywołać skrypt rysujacy, a nie w jednym wywołaniu wysyłać dwa obrazki.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
mhs
post 8.01.2004, 13:36:25
Post #6





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


mozesz mi podac kawalek kodu? bo szcze piszac nie za bardzo rozumiem jak mam to wykonac.
Go to the top of the page
+Quote Post
scanner
post 8.01.2004, 13:44:42
Post #7





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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">


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
mhs
post 8.01.2004, 13:51:49
Post #8





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


no i wszystko jasne smile.gif

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

piekne dzieki
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: 26.06.2025 - 06:53