Сайт: letitbit.net Распознавание: PHP: $img = imagecreatefromjpeg("code.jpg"); // Загружаем изображение $x = imagesx($img); // Ширина изображения $y = imagesy($img); // Высота изображения $black = imagecolorallocate ($img, 0, 0, 0); // Индификатор черного цвета $color = imagecolorallocate ($img, 150, 150, 150); // Индификатор цвета немного темнее чем шум for ($i=0;$i<$x;$i++){ for ($j=0;$j<$y;$j++){ if (imagecolorat($img,$i, $j) <= $color){ // Если цвет пикселя темнее чем шум, значит это символ imagesetpixel($img,$i, $j, $black); // Тогда заменяем его черным цветом } }} $sdn=4; $sdk=13; // Границы 1 символа $res = array(); for ($i=1;$i<=6;$i++){ $count=0; for ($x=$sdn;$x<$sdk;$x++){ for ($y=4;$y<=15;$y++){ if (imagecolorat($img,$x,$y) == $black) { // Если пиксель черный $count++; // Суммируем его } }} $sdn=$sdk; $sdk+=9; // Меняем координаты для поиска следующего символа switch ($count){ case 36:{$res[$i] = "0";break;} // Если количество черных пикселей 36, то это 0 case 27:{$res[$i] = "1";break;} // ... case 32:{$res[$i] = "2";break;} case 31:{ if (imagecolorat($img,($x-1),7) == $black) { // Дополнительная проверка $res[$i] = "3"; } else { $res[$i] = "e"; } break; } case 35:{$res[$i] = "4";break;} case 37:{$res[$i] = "5";break;} case 39:{ if (imagecolorat($img,($x-1),7) == $black) { $res[$i] = "9"; } else { $res[$i] = "6"; } break; } case 26:{$res[$i] = "7";break;} case 40:{$res[$i] = "8";break;} case 33:{$res[$i] = "a";break;} case 38:{ if (imagecolorat($img,($x-1),5) == $black) { $res[$i] = "d"; } else { $res[$i] = "b"; } break; } case 24:{$res[$i] = "c";break;} case 30:{$res[$i] = "f";break;} }} $code=$res[1].$res[2].$res[3].$res[4].$res[5].$res[6]; Ссылка на скрипт: letitbit.php.txt Последние 3 строчки мне помог написать Онотоле...
спасибо огромное! особенно радует то что слово сайт в множественном числе и присутствует ключевое слово РАЗЛИЧНЫХ = скоро появятся ещё распознавалки!
Бред вообще по способу Nomer1 круче получается А вообще это трудная работа выставлять попиксельно картинки. Ну не для php она!
2 mr.The Вообще я собираюсь продолжить эту тему и если есть предложения или идеи, пишите их. // Переделать этот скрипт под легкие капчи действительно не составит труда)
я тоже этим занимаюсь потихоньку.. щас застрял на алгоритме скелетизации. всё готово на бумаге, осталось перенести в код и затестить. дальше планирую юзать ИИ.
А ничего если капчу развернуть и немного сделать мутной? Алгортимы будут работать? -Если и будут, то уж никак не быстро
ясно , что у php результаты будут не из лучших... ЗЫ: По-моему, разбор по пикселям обязателен, без него никак =)
начиная слева сверху в двух вложенных циклах проходим по картинке, если цвет темный то это кусок буквы, делаем счетчику +1, если прошли вертикальную строку и там темного цвета нет, то буква закончилась, начинаем отсчет для новой, в конце в ассоциативном массиве у нас сколько пикселей в какой букве, по нему получаем код на капче, вот всё.
Всё пашет, распознает без ошибок) покраней мере у меня .. PS: привел скрипт к чуть более читаемому виду PHP: <?php $path = explode("letitbit.net", $_GET['url']); $thread = ''; if($fsock = fsockopen("letitbit.net", 80, $errno, $errstr, 30)) { @fputs($fsock, "GET ".$path[1]." HTTP/1.1\r\n"); @fputs($fsock, "Host: letitbit.net\r\n"); @fputs($fsock, "Connection: close\r\n\r\n"); while (!@feof($fsock)) { $thread .= @fread($fsock, 128); } @fclose($fsock); } $premium = explode("download3", $thread); $uidfind = strpos($premium[1], "uid"); $uid2find = strpos($premium[1], "uid2"); $uid = substr($premium[1], ($uidfind + 12), 32); $uid2 = substr($premium[1], ($uid2find + 13), 12); $thread = ''; if($fsock = fsockopen("letitbit.net", 80, $errno, $errstr, 30)) { @fputs($fsock, "GET /cap.php?jpg=".$uid2.".jpg HTTP/1.1\r\n"); @fputs($fsock, "Host: letitbit.net\r\n"); @fputs($fsock, "Connection: close\r\n\r\n"); while (!@feof($fsock)) { $thread .= @fread($fsock, 128); } @fclose($fsock); } $html = explode("\r\n\r\n", $thread); $f = fopen("code.jpg", "w"); fputs($f, substr($html[1], 5)); fclose($f); //////////////////////////////////////////////////// $img = imagecreatefromjpeg("code.jpg"); $x = imagesx($img); $y = imagesy($img); $black = imagecolorallocate ($img, 0, 0, 0); $color = imagecolorallocate ($img, 150, 150, 150); for ($i = 0; $i < $x; $i++) { for ($j = 0; $j < $y; $j++) { if (imagecolorat($img, $i, $j) <= $color) { imagesetpixel($img, $i, $j, $black); } } } $sdn = 4; $sdk = 13; $res = array(); for ($i = 1; $i <= 6; $i++) { $count = 0; for ($x = $sdn; $x < $sdk; $x++) { for ($y = 4; $y <= 15; $y++) { if (imagecolorat($img, $x, $y) == $black) { $count++; } } } $sdn = $sdk; $sdk += 9; switch ($count) { case 36: { $res[$i] = "0"; break; } case 27: { $res[$i] = "1"; break; } case 32: { $res[$i] = "2"; break; } case 31: { if (imagecolorat($img, ($x - 1), 7) == $black) { $res[$i] = "3"; } else { $res[$i] = "e"; } break; } case 35: { $res[$i] = "4"; break; } case 37: { $res[$i] = "5"; break; } case 39: { if (imagecolorat($img, ($x - 1), 7) == $black) { $res[$i] = "9"; } else { $res[$i] = "6"; } break; } case 26: { $res[$i] = "7"; break; } case 40: { $res[$i] = "8"; break; } case 33: { $res[$i] = "a"; break; } case 38: { if (imagecolorat($img, ($x - 1), 5) == $black) { $res[$i] = "d"; } else { $res[$i] = "b"; } break; } case 24: { $res[$i] = "c"; break; } case 30: { $res[$i] = "f"; break; } } } $code = $res[1].$res[2].$res[3].$res[4].$res[5].$res[6]; //////////////////////////////////////// $thread = ""; $data = "uid=".$uid."&cap=".$code."&frameset=%D1%EA%E0%F7%E0%F2%FC+%F4%E0%E9%EB&uid2=".$uid2."&fix=1"; if($fsock = fsockopen("letitbit.net", 80, $errno, $errstr, 30)) { @fputs($fsock, "POST /download3.php HTTP/1.1\r\n"); @fputs($fsock, "Host: letitbit.net\r\n"); @fputs($fsock, "Referer: ".$url."\r\n"); @fputs($fsock, "Connection: close\r\n"); @fputs($fsock, "Content-Type: application/x-www-form-urlencoded\r\n"); @fputs($fsock, "Content-Length: ".strlen($data)."\r\n\r\n"); @fputs($fsock, $data); while (!@feof($fsock)) { $thread .= @fgetc($fsock); } @fclose($fsock); } preg_match("/http:\/\/letitbit\.net\/tmpl\/tmpl_frame_top\.php\?link=([^\"]*)\"/", $thread, $m); echo "<hrml><head><title>letitbit</title></head><body<<center><a href=\"{$m[1]}\">Прямая ссылка</a></center></body></html>"; ?> + UserJS для летитбита, кому самому лень писать Code: var url = 'http://localhost/letitbit.php?url=' + escape(document.location); document.write("<a href='" + url + "'>Get link</a>"); Автоматический редирект сделать не получилось, опера начала матюгаться не понятно на что =\