у виконта спроси, это его капча для лепры. оффтоп. был даже забавный случай. парень начал утверждать что умеет получать текст с картинки и написал страничку которая хавала капчу с лепры и через пару секунд выводила текст на страницу и за ящик пива предложено угадать алгоритм. победил витя - глянув в логи сервера он не увидел запросов капчи в указанное время, следовательно парень сам генерил строку, картинку, показывал картинку и через некоторое время текст типа разгадывался. /оффтоп. а на самом деле в чем проблема-то? сделал холст нужного цвета, кинул пару-тройку кривых, кинул 5 букв, натыкал точек.
Код (Text): session_start(); $t = dirName(__FILE__).'/font/evanescent.ttf'; // адрес текстуры $b = 'bdefhkmnprstuvwxyz';// буквы $w = 250;// высота $h = 60;// ширина $n = 6; // число букв $v = 0x000000;// цвет содержимого $d = 0xFFDDA6;// цвет носителя $l = strlen($b); // число букв в списке $a = $b{rand(0, $l-1)}; // выбираем рандомную букву $captcha = imagecreatetruecolor($w, $h);// формируем обводку imagefilledrectangle($captcha, 1, 1, $w-2, $h-2, $d); // формируем носитель ImageArc($captcha, 120, 40, rand(200,220), rand(200,220), 0, 360, $v); ImageArc($captcha, 120, 40, rand(100,120), rand(150,180), 0, 360, $v);// рисуем круги for ($c = 0; $c < 2000; $c++){ $xx = rand(0,$w); $yy = rand(0,$h); imagesetpixel($captcha, $xx, $yy, $v);} // вставляем шум for ($i = 1; $i < $n; $i = strlen($a)){$r = $b{rand(0, $l)};if ($r != $a{$i - 1}){$a .= $r;}}$_SESSION['captcha'] = md5($a); // генерим буквы for ($i = 0; $i < $n; $i++){ $o = ((($w-(2*(9/11)))/$n)*($i*(9/11))+15)+rand(6,8); imagettftext($captcha, rand(($h/4)*3,($h/3)*2), rand(18,25)-20, rand($o,($o+10)),rand(30,50), $v, $t, $a{$i});} // печатаем буквы header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 600) . 'GMT'); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header ("Content-type: image/png"); imagepng($captcha); imagedestroy($captcha); хотел сперва Абсолютное позиционирование сделать но понял что это на долго =)
Vantedur, молодец. Только в строке Код (PHP): for ($i = 1; $i < $n; $i = strlen($a)){$r = $b{rand(0, $l)};if ($r != $a{$i - 1}){$a .= $r;}} в функции rand сделай $l-1, как и выше делал. Добавлено спустя 1 минуту 24 секунды: Хотя, может, так задумано, чтобы периодически отваливалось, чтобы трудно было распознать..
ну я к капче без фанатизма подошёл, будет ещё время её сто раз обтачить. в принципе я вполне доволен тем какая она получилась P.S. да и тот код что я тут выложил я уже несколько раз переписал =)