Share on Google+Share on Google+

PHP GD Captcha Refersh

Advertisement
In this example we will see how to refresh captcha image in php gd.
index.php

<?php

session_start();

if(isset($_POST['submit_x']) && isset($_POST['submit_y'])) {

if(!empty($_POST['name']) && !empty($_POST['message'])) {

$data = base64_decode($_SESSION['captcha_image_code']);

$captcha_image = imagecreatefromstring($data);

$x = $_POST['submit_x'];

$y = $_POST['submit_y'];

$rgb = imagecolorat($captcha_image, $x, $y);

$color_tran = imagecolorsforindex($captcha_image, $rgb);

$captcha_ok = ($color_tran['red'] == 255 && $color_tran['green'] == 0 && $color_tran['blue'] == 0 && $color_tran['alpha'] == 0) ;

if($captcha_ok) {

$result = "Thanks for submitting your comment.";

}

} else {

$result = "Please fill out the form.";

}

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Captcha</title>

</head>

<body>

<?php if(!empty($result)) echo "<div style='color:#990000; margin-bottom: 20px;'>" . $result . "</div>"; ?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">

<p>Name<br/><input type="text" name="name" /></p>

<p>Message<br/><textarea name="message"></textarea></p>

<p>

Click the captcha to get another security code:<br/>

<input type='image' name='submit' src='captcha.php' alt='Captcha Security Image' />

</p>

</form>

</body>

</html>

This page is saved as index.php

captcha.php

<?php

session_start();

class CaptchaSecurityImages {

var $font = 'C:/WINNT/Fonts/arial.ttf';

function generateCode($characters) {

$possible = '23456789bcdfghjkmnpqrstvwxyz';

$code = '';

$i = 0;

while ($i < $characters) {

$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);

$i++;

}

return $code;

}

function CaptchaSecurityImages($width='320',$height='40',$characters='6') {

$code = $this->generateCode($characters);

$font_size = $height * 0.75;

$image = imagecreate($width, $height) or die('Cannot initialize new GD image stream');

$background_color = imagecolorallocate($image, 255, 255, 255);

$text_color = imagecolorallocate($image, 20, 40, 100);

$noise_color = imagecolorallocate($image, 100, 120, 180);

for( $i=0; $i<($width*$height)/3; $i++ ) {

imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);

}

for( $i=0; $i<($width*$height)/150; $i++ ) {

imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);

}

$textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');

$x = ($width - $textbox[4])/2;

$y = ($height - $textbox[5])/2;

imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');

header('Content-Type: image/jpeg');

imagejpeg($image);

imagedestroy($image);

$_SESSION['security_code'] = $code;

}

}

$width = isset($_GET['width']) && $_GET['width'] < 600 ? $_GET['width'] : '120';

$height = isset($_GET['height']) && $_GET['height'] < 200 ? $_GET['height'] : '40';

$characters = isset($_GET['characters']) && $_GET['characters'] > 2 ? $_GET['characters'] : '6';

$captcha = new CaptchaSecurityImages($width,$height,$characters);

?>

 

After running the program you will get the following output

Advertisements

Posted on: November 16, 2009 If you enjoyed this post then why not add us on Google+? Add us to your Circles

Share this Tutorial Follow us on Twitter, or add us on Facebook or Google Plus to keep you updated with the recent trends of Java and other open source platforms.