![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 110 Pomógł: 0 Dołączył: 3.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tworzę tokena z tutoriala bo nigdy wcześniej nie rozbiłem takiego czegoś, i mam taki kod:
Kod <?php $slowa=file('hasla.txt'); if(isset($_GET['id'])) $nr=$_GET['id']; else $nr=rand(0,count($slowa)-1); $slowo=$slowa[$nr]; $wysokosc=20; $szerokosc=60; $pic=ImageCreate($szerokosc,$wysokosc); $bialy=ImageColorAllocate($pic,255,255,255); $czarny=ImageColorAllocate($pic,0,0,0); $szary=ImageColorAllocate($pic,150,150,150); ImageFill($pic,1,1,$bialy); for($i=0;$i<100;$i++) { $los1=rand(0,$szerokosc); $los2=rand(0,$wysokosc); ImageLine($pic,$los1,$los2,$los1,$los2,$szary); } for($i=0;$i<count($slowa);$i++) { $rozmiar=rand(2,5); ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny); } Header("Content-type: image/gif"); ImageGIF($pic); ?> i co do powyższego kodu mam kilka zasadniczych pytań, od początku czyli: else $nr=rand(0,count($slowa)-1); jakie zadanie ma -1 ? bo po testach zauważyłem, że gdy jest -1 to zawsze wyświetli się wyraz, a jeżeli nie ma tego -1 to niekiedy nie wyświetla się wyraz tylko samo tło tokenu, nie rozumiem tego(?) druga sprawa to druga pętla for: Kod for($i=0;$i<count($slowa);$i++) { $rozmiar=rand(2,5); ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny); } i dokładnie nie rozumiem tam tego: $i*10+7, to jest 3 argument tej funkcji, który ma być punktem zaczęcia napisu z lewej górnej strony, tak pisze w manualu w takim razie dlaczego $i*10 to jest przerwa pomiędzy kolejnymi literami, a 7 to odległość napisu z lewej strony? testowałem inny obrazek bez pętli to działał normalnie czyli 3 argument to była poprostu odległość od lewego górnego pkt. nie rozumiem jednak tej pętli, z góry dzięki za cierpliwosc i wytlumaczenie :] pzdr. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 1 Dołączył: 22.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Pozwolę sobie Panu odpowiedzieć.
Jeśli chodzi o linijkę: CODE else $nr=rand(0,count($slowa)-1); count($slowa) oznacza po prostu długość tablicy $slowa. Jak wiemy, w PHP indeksy tablicy zaczynają się od zera, a nie od 1. Długość tablicy jest więc o 1 większa niż indeks jej ostatniego elementu. Gdybyśmy nie odjęli 1, funkcja rand() mogłaby wylosować element leżący poza tablicą (stąd czasami pojawia się Panu puste tło). Odnośnie pętli: CODE for($i=0;$i<count($slowa);$i++) Zawiera ona rażący błąd (byćmoże autor Tutoriala pomylił się). Zamiast count($slowa) powinno być strlen($slowo). Nie wątpię jednak, że token uruchamia się Panu pozornie prawidłowo. Proszę jednak zauważyć, że jeżeli długość słowa jest większa od ilości wpisów w pliku "hasla.txt", to nie zostanie wyświetlone pełne słowo. Jeżeli słów jest dużo, to problem jest niezauważalny. Niestety, jeżeli mamy np. 5 słów w pliku, z których jedno brzmi np. "Parasaurolofus", to na tokenie zobaczymy tylko literki "Paras". Dzieje się tak, ponieważ count($slowa) oznacza długość tablicy $slowa, czyli ilość tekstów z pliku. Zamiast tego powinno być: CODE for ($i=0;$i<strlen($slowo);$i++) Teraz wyświetli się Panu tyle literek, ile zawiera ich tekst w zmiennej $slowo. Odnośnie linijki: CODE ImageString($pic,$rozmiar,$i*10+7,3,trim($slowo[$i]),$czarny); Punktem, od którego zaczniemy rysowanie tekstu w poziomie będzie 7, ponieważ w pierwszym przebiegu pętli wartość zmiennej $i będzie wynosić 0, a więc 0*10+7 = 7. W kolejnym przebiegu wartość zmiennej $i będzie wynosić 1, a więc 1*10+7 = 17. Jak więc Pan widzi, odległość między początkami kolejnych liter wynosi 10. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 16:06 |