Jump to content
php.lv forumi

GD - mistika piešķirot mainīgajam rand skaitli


wudu

Recommended Posts

kods: http://paste.php.lv/3455

 

problēma: mainīgajam $skaitlis tiek piešķirta gadījuma vērtība un tas tiek izvadīts kā PNG bilde. Tiktāl viss būtu labi, taču pēc izvades mainīgā $skaitlis vērtība vairs nav tāda pati kā izvadītajā bildē.

 

jautājums: kāpēc un kā to var labot?

 

p.s. ja mainīgajam $skaitlis vērtību piešķir manuāli ($skaitlis = 84), tad viss strādā kā vajag. šādi: $x = rand(1,100); $skaitlis = $x; arī nestrādā kā vajadzētu...

 

par to pārliecināties var, palaižot kodu (uzģenerējas skaitlis) un paskatoties sourci. tur stāv pavisam cits skaitlis. mistika, gļuks vai tas tāpēc, ka es gulēt gribēju, kad šito kodu rakstīju?

Link to comment
Share on other sites

Vai nav tā, ka fjai ImageTTFText jāpadod strings kā pēdējais parametrs nevis skaitlis? Tu paskaties cik ir skaitils pirms fjas izsaukšanas: echo $skaitlis;

Iespējams, ka ImageTTFText uztver skaitli kā kautkādu ascii simbola kodu. Ja tā, tad nokasto uz stringu.

Link to comment
Share on other sites

pievienojot burtus ap skaitli ($skaitlis = "a".rand(1,100)."b";), situācija nemainās - burti paliek, skaitlis mainās (piem. a65b -> a12b). un šajā gadījumā tas jau ir string tipa. :| arī izdzenot cauri kkādām fjām, kuras rezultātu atgriež kā string.

 

pirms ImageTTFText skaitlis ir tāds pats kā beigās (tātad to man arī vajag), bet uz bildes tiek uzzīmēts pavisam kas cits...

 

šis arī nestrādā:

$x = rand(0,9);
switch ($x){
case 0: $skaitlis = "0"; break;
case 1: $skaitlis = "1"; break;
case 2: $skaitlis = "2"; break;
case 3: $skaitlis = "3"; break;
case 4: $skaitlis = "4"; break;
case 5: $skaitlis = "5"; break;
case 6: $skaitlis = "6"; break;
case 7: $skaitlis = "7"; break;
case 8: $skaitlis = "8"; break;
case 9: $skaitlis = "9"; break;
}

 

bet lūk šādi strādā: $skaitlis = "5";

Link to comment
Share on other sites

Nezinu kā tev, bet man tavs kods strādā kā vajag.

Ja echo $skaitlis pirms ImageTTFText fjas izvada 96, tad arī bildē ir 96 un pēc fjas izsaukuma arī ir 96:

<?php
 $himg = ImageCreate(100, 100);
 $bgcolor = ImageColorAllocate($himg, 230,230,230);
 $txtcolor= ImageColorAllocate($himg, 0,0,0);
 ImageFill($himg, 0, 0, $bgcolor);
 $skaitlis = rand(1,100);
 echo $skaitlis, "\n";
 ImageTTFText ($himg, 30, 0, 0, 30, $txtcolor, "verdana.ttf", $skaitlis);
 ImagePNG($himg, '_fails.png');
 echo $skaitlis, "\n";
?>

 

Par tavu ūberswitchu - piedod, bet vai tu jocīgs esi? :) $skaitlis = (string)$x; tak!

 

Gadījumā fonts nav tāds "speciāls" - ar sajauktiem cipariem?

Link to comment
Share on other sites

njā, kad ieraksta failā, tad ir ok, bet noņem pirmo [echo $skaitlis, "\n";], uzliec lai nerakstās failā un atkal vecie pīrāgi. man tieši vajag lai bildi varētu parādīt (turpat un uzreiz), nevis nokačāt ar pareizu ciparu.

 

ūberswitch tāds taisīts ar nolūku, lai parādītu ka itkā vienāda vērtības piešķiršana, bet kā tiek iejaukts rand, tā ImageTTFText kko gļuko.

 

fonts ir visparastākais, nekas nav mainīts

Edited by wudu
Link to comment
Share on other sites

ūbersvitču tak ar šo var aizstāt: $skaitlis = (string)$x; Par to jau tak pasmējos.

 

Man apacis nav uzlikts un slinkums likt. Es to php komandrindā laižu. Pag bet nesaprotu - kāda atšķirība kur php skriptu izpilda? Tak cipari no tā sajukt nevar. Es saprastu, ja galīgi bildes visi pikseļi sajuktu, tad vēl kautko varētu padomāt, ka apacis vainīgs.. Bet ja cipari mainās, bet burti nē, tad tu kautko tur dīvainu daries...

Link to comment
Share on other sites

da ne par to ir runa - pareizi vai nepareizi, tas tikai paarbaudei... tur jau taa lieta, ka man neder bubu variants. man to bildi vajag turpat un uzreiz, nevis saglabaat

Edited by wudu
Link to comment
Share on other sites

kam izņemt 2. parametru? echo, die - tie neko neietekmē, pamēģini izvades vietā ielikt, lai ieraksta failā un tad pārbaudi to kas parādās uz zīmējuma un to, kas ir failā.

 

ja tev izdevās panākt to ko es lūdzu (praksē, nevis teorijā), tad vai tu nevarētu man parādīt pašu kodu? ja tu tikai saki, ka tam un šitam būtu jāstrādā - varbūt ir vērts vispirms pārbaudīt?

Link to comment
Share on other sites

×
×
  • Create New...