$id= (int) $_GET['id'];
$query="SELECT code FROM captcha WHERE id='$id'";
list($code) = mysql_fetch_array(mysql_query($query));
$font = dirname(__FILE__)."/arial.ttf";
$width='140';
$height='40';
// важно: для одного и того же $code - всегда одна и та же картинка!
mt_srand(crc32($code));
//рандомные цвета в разумных пределах (под дизайн сайта)
$font_size = $height * 0.85;
$image = @imagecreate($width, $height);
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, mt_rand(5,15), mt_rand(60,120), mt_rand(90,180));
$noise_color = imagecolorallocate($image, mt_rand(40,160), mt_rand(60,180), mt_rand(120,240));
$textbox = imagettfbbox($font_size, 0, $font, $code);
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
$d = -1;
//рисуем "выеденные" буквы, пустые внутри
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);
imagettftext($image, $font_size, 0, $x + $d, $y + $d, $noise_color, $font , $code);
imagettftext($image, $font_size, 0, $x + 2 * $d + 1, $y + 2 * $d + 1, $noise_color, $font , $code);
imagettftext($image, $font_size, 0, $x + 2 * $d, $y + 2 * $d, $background_color, $font , $code);
//добавляем рандомного шума
for( $i=0; $i<($width*$height)/10; $i++ ) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(1,2), mt_rand(1,2), $background_color);
}
for( $i=0; $i<($width*$height)/25; $i++ ) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $text_color);
}
//чуть-чуть повернем, чтоб заблурить шум
$image = imagerotate($image, mt_rand(0,1)*2-1, $background_color);
// выводим
header("Content-type: image/jpeg");
imagejpeg($image);
imagedestroy($image);