EagerWolf Posted April 25, 2007 Share Posted April 25, 2007 Here is code: imggen.php //Generates img <? //start a session session_start(); //this function is called recursivelly function random_string($len=5, $str='') { for($i=1; $i<=$len; $i++) { //generates a random number that will be the ASCII code of the character. //We only want numbers (ascii code from 48 to 57) and caps letters. $ord=rand(48, 90); if((($ord >= 48) && ($ord <= 57)) || (($ord >= 65) && ($ord<= 90))) $str.=chr($ord); //If the number is not good we generate another one else $str.=random_string(1); } return $str; } //create the random string using the upper function //(if you want more than 5 characters just modify the parameter) $rand_str=random_string(5); //We memorize the md5 sum of the string into a session variable $_SESSION['image_value'] = md5($rand_str); //Get each letter in one valiable, we will format all letters different $letter1=substr($rand_str,0,1); $letter2=substr($rand_str,1,1); $letter3=substr($rand_str,2,1); $letter4=substr($rand_str,3,1); $letter5=substr($rand_str,4,1); //Creates an image from a png file. If you want to use gif or jpg images, //just use the coresponding functions: imagecreatefromjpeg and imagecreatefromgif. $image=imagecreatefrompng("image.png"); //Get a random angle for each letter to be rotated with. $maxkot = 15; $minkot = -15; $angle1 = rand($minkot, $maxkot); $angle2 = rand($minkot, $maxkot); $angle3 = rand($minkot, $maxkot); $angle4 = rand($minkot, $maxkot); $angle5 = rand($minkot, $maxkot); //Get a random font. (In this examples, the fonts are located in "fonts" directory and named from 1.ttf to 10.ttf) $font1 = "fonts/".rand(1, 5).".ttf"; $font2 = "fonts/".rand(1, 5).".ttf"; $font3 = "fonts/".rand(1, 5).".ttf"; $font4 = "fonts/".rand(1, 5).".ttf"; $font5 = "fonts/".rand(1, 5).".ttf"; //Define a table with colors (the values are the RGB components for each color). $colors[0]=array(7,7,130); $colors[1]=array(1,101,4); $colors[2]=array(101,32,1); $colors[3]=array(89,0,0); $colors[4]=array(61,0,89); $colors[5]=array(0,84,89); //Get a random color for each letter. $color1=rand(0, 5); $color2=rand(0, 5); $color3=rand(0, 5); $color4=rand(0, 5); $color5=rand(0, 5); //Allocate colors for letters. $textColor1 = imagecolorallocate ($image, $colors[$color1][0],$colors[$color1][1], $colors[$color1][2]); $textColor2 = imagecolorallocate ($image, $colors[$color2][0],$colors[$color2][1], $colors[$color2][2]); $textColor3 = imagecolorallocate ($image, $colors[$color3][0],$colors[$color3][1], $colors[$color3][2]); $textColor4 = imagecolorallocate ($image, $colors[$color4][0],$colors[$color4][1], $colors[$color4][2]); $textColor4 = imagecolorallocate ($image, $colors[$color5][0],$colors[$color5][1], $colors[$color5][2]); //Write text to the image using TrueType fonts. $size = 40; imagettftext($image, $size, $angle1, 15, $size+rand(15,50), $textColor1, $font1, $letter1); imagettftext($image, $size, $angle2, 50, $size+rand(15,50), $textColor2, $font2, $letter2); imagettftext($image, $size, $angle3, 85, $size+rand(15,50), $textColor3, $font3, $letter3); imagettftext($image, $size, $angle4, 120, $size+rand(15,50), $textColor4, $font4, $letter4); imagettftext($image, $size, $angle5, 155, $size+rand(15,50), $textColor5, $font5, $letter5); header('Content-type: image/jpeg'); //Output image to browser imagejpeg($image); //Destroys the image imagedestroy($image); ?> show.php <? session_start(); ?> <img src="imggen.php"> <form method="POST" action="valid.php"> <input type="text" name="numcheck"> <input type="submit" name="Submit" value="Sprejmi"> <input type="hidden" name="hidnum" value="<? print $_SESSION['image_value']; ?>"> </form> <?php print_r($_SESSION); ?> I have experienced strange problem. When I open file show.php image is being showed, but nothing is being stored in $_SESSION on reload in $_SESSION is stored key from previous img... Any idea? 10x for your help! Link to comment https://forums.phpfreaks.com/topic/48619-img-validation-problem/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.