Интересующийся

Группа: Members
Сообщений: 1
Пользователь №: 5530
Регистрация: 12-December 09
Рейтинг: (0%) 

|
Давно использую этот код для отправки сообщений с сайта спасибо авторам! а сегодня перед вставкой кода на новый сайт переработал файлик img.php который рисует так называемую каптчу, вот делюсь:
| CODE | <?php $width = 90; // Размер КАПТЧИ $height = 25; $complicacy=2; // Сложность (0-6) # ^ 0-четкая и простая, только для теста, легко разпознается; # | 1-четкая, тест TTF шрифта, легко разпознается; # | 2-размытая и волновая, самая комфортная для человека; # | 3-Самое оно, не линейная, случайный наклон и размер цифр; # | 4-усложняем Фоновым мусором, двойное размытие; # | 5-больше активного мусора, 100% защиты но для человека сложно; # | 6-CrAzYfOrAnTiCaPtChAtEsT!!!11 $red=255; // Задаем цвет Фона белый $green=255; $blue=255; $bred=0; // Задаем цвет цифр черный $bgreen=0; $bblue=0; $gred=100; // Задаем цвет RGB мусора, должен быть близок к символам но не Факт $ggreen=100; $gblue=100;
#############################################CODE $code = (eregi("^[0-9]+$",$_GET['code']))? $_GET['code']:"--"; $code_confirm = hexdec(md5(md5($code.$_SERVER['REMOTE_ADDR']))); $code_confirm = substr($code_confirm,3,6);
$image = imagecreatetruecolor($width,$height); $width = ImageSX($image); $height = ImageSY($image); // Делаем круче цвет imagealphablending($image, true);
// Делаем цвет $background_color = array($red, $green, $blue); $foreground_color = array($bred, $bgreen, $bblue); $white=imagecolorallocate($image, $red, $green, $blue); $black=imagecolorallocate($image, $bred, $bgreen, $bblue); $grey=imagecolorallocate($image, $gred, $ggreen, $gblue);
// Заливаем фон imagefilledrectangle($image, 0, 0, ImageSX($image)-1, ImageSY($image)-1, $white); if($complicacy>4){ // Нарисуем случайных линий (мусор темный) for ($i=0;$i<2;$i++) { $x1=mt_rand(0,$width/2-1); $x2=mt_rand($width/2-1,$width-1); $y1=mt_rand(0,$height-1); $y2=mt_rand(0,$height-1); imageline($image,$x1,$y1,$x2,$y2,$grey); } }
if($complicacy>5){ // Нарисуем горох for ($i=0;$i<7;$i++) { $x1=mt_rand(5,$width-5); $x2=mt_rand(3,5); $y1=mt_rand(5,$height-5); $y2=mt_rand(3,5); imageellipse($image,$x1,$y1,$x2,$y2,$black); } }
// Пишем код if($complicacy==0){ $rndkof=mt_rand(-5,5); // 1 вариант imagestring($image,12,13+$rndkof,3, $code_confirm, $grey); imagestring($image,12,12+$rndkof,2, $code_confirm, $foreground_color); header("content-type: image/png"); imagepng($image); imagedestroy($image); die(); } $rndttf=mt_rand(1,3); $font = "data/ttf/".$rndttf.".ttf"; if($complicacy>0 && $complicacy<3){ // 2 вариант imagettftext($image, 15, 0, 10+$rndkof, 20, $black, $font, $code_confirm); } if($complicacy>2){ // 3 вариант for ($i=0;$i<6;$i++) { imagettftext($image, 15+mt_rand(-3,1), mt_rand(-12,12), ($i*12)+10+$rndkof, 20, $black, $font, $code_confirm[$i]); } }
if($complicacy>1){ // Приготовились? Поехали! Искривлять $x = ImageSX($image); $y = ImageSY($image); $center=$x/2; $img2=imagecreatetruecolor(ImageSX($image), ImageSY($image));
// случайные параметры (можно поэкспериментировать с коэффициентами): // частоты $rand1=mt_rand(250000,1200000)/10000000; $rand2=mt_rand(450000,1200000)/10000000; $rand3=mt_rand(650000,1200000)/10000000; $rand4=mt_rand(850000,1200000)/10000000; // фазы $rand5=mt_rand(0,3141592)/100000; $rand6=mt_rand(0,3141592)/200000; $rand7=mt_rand(0,3141592)/300000; $rand8=mt_rand(0,3141592)/500000; // амплитуды $rand9=mt_rand(210,310)/110; $rand10=mt_rand(210,310)/110; // Сам процесс искривления for($x=0;$x<ImageSX($image);$x++){ for($y=0;$y<ImageSY($image);$y++){ $sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1; $sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10; if($sx<0 || $sy<0 || $sx>=$width-1 || $sy>=$height-1){ $color=255; $color_x=255; $color_y=255; $color_xy=255; }else{ $color=imagecolorat($image, $sx, $sy) & 0xFF; $color_x=imagecolorat($image, $sx+1, $sy) & 0xFF; $color_y=imagecolorat($image, $sx, $sy+1) & 0xFF; $color_xy=imagecolorat($image, $sx+1, $sy+1) & 0xFF; } if($color==0 && $color_x==0 && $color_y==0 && $color_xy==0){ $newred=$foreground_color[0]; $newgreen=$foreground_color[1]; $newblue=$foreground_color[2]; }else if($color==255 && $color_x==255 && $color_y==255 && $color_xy==255){ $newred=$background_color[0]; $newgreen=$background_color[1]; $newblue=$background_color[2]; }else{ $frsx=$sx-floor($sx); $frsy=$sy-floor($sy); $frsx1=1-$frsx; $frsy1=1-$frsy; $newcolor=( $color*$frsx1*$frsy1+ $color_x*$frsx*$frsy1+ $color_y*$frsx1*$frsy+ $color_xy*$frsx*$frsy); if($newcolor>255) $newcolor=255; $newcolor=$newcolor/255; $newcolor0=1-$newcolor; $newred=$newcolor0*$foreground_color[0]+$newcolor*$background_color[0]; $newgreen=$newcolor0*$foreground_color[1]+$newcolor*$background_color[1]; $newblue=$newcolor0*$foreground_color[2]+$newcolor*$background_color[2]; } imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue)); } } } if($complicacy==1) $img2=$image; if($complicacy>3){ // Пост обработка // Нарисуем случайных линий (мусор) for ($i=0;$i<2;$i++) { $x1=mt_rand(0,$width/2-1); $x2=mt_rand($width/2-1,$width-1); $y1=mt_rand(0,$height-1); $y2=mt_rand(0,$height-1); imageline($img2,$x1,$y1,$x2,$y2,imagecolorallocate($img2, $newred, $newgreen, $newblue)); } }
if($complicacy>1){ // Размазываем, можно несколько раз $gaussian = array(array(1.0, 2.0, 1.0), array(2.0, 4.0, 2.0), array(1.0, 2.0, 1.0)); imageconvolution($img2, $gaussian, 16, 0);} if($complicacy>3) imageconvolution($img2, $gaussian, 16, 0); if($complicacy>5) imageconvolution($img2, $gaussian, 16, 0); // Отображаем, рисуем то что вышло header("content-type: image/png"); imagepng($img2); imagedestroy($img2); imagedestroy($image); ?>
|
вот такие КАПТЧИ рисует этот код. Мож кому и нужно. средняя  сложнее  еще сложнее  и т.д. см код  ЗЫ: код можете переделывать как угодно! ЗЫ2: Забыл! Для каптчи нужны TTF шрифты! которые лежат в папке DATA/TTF/*.TTF тут использовано 3 шрифта имена у шрифтов рандомные 1,2 или 3! так что не забывайте! Это сообщение отредактировал DmitriK - Dec 12 2009, 19:45 PM
|