X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Искажённая captcha
tro9an
tro9an
Topic Starter сообщение 7.4.2012, 15:39; Ответить: tro9an
Сообщение #1


Здравствуйте, сейчас учусь делать капчу. Вот нашёл исходник но мне тут не всё понятно, пожалуйста, кому не сложно, максимально закомментируйте код. Сдесь описан алгоритм скручивания изображения:
//$img — изображение-первообраз, $img2 — результат искажения
// случайные параметры (можно поэкспериментировать с коэффициентами):
// частоты
$rand1 = mt_rand(700000, 1000000) / 15000000;
$rand2 = mt_rand(700000, 1000000) / 15000000;
$rand3 = mt_rand(700000, 1000000) / 15000000;
$rand4 = mt_rand(700000, 1000000) / 15000000;
// фазы
$rand5 = mt_rand(0, 3141592) / 1000000;
$rand6 = mt_rand(0, 3141592) / 1000000;
$rand7 = mt_rand(0, 3141592) / 1000000;
$rand8 = mt_rand(0, 3141592) / 1000000;
// амплитуды
$rand9 = mt_rand(400, 600) / 100;
$rand10 = mt_rand(400, 600) / 100;

for($x = 0; $x < $width; $x++){
  for($y = 0; $y < $height; $y++){
    // координаты пикселя-первообраза.
    $sx = $x + ( sin($x * $rand1 + $rand5) + sin($y * $rand3 + $rand6) ) * $rand9;
    $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{ // цвета основного пикселя и его 3-х соседей для лучшего антиалиасинга
      $color = (imagecolorat($img, $sx, $sy) >> 16) & 0xFF;
      $color_x = (imagecolorat($img, $sx + 1, $sy) >> 16) & 0xFF;
      $color_y = (imagecolorat($img, $sx, $sy + 1) >> 16) & 0xFF;
      $color_xy = (imagecolorat($img, $sx + 1, $sy + 1) >> 16) & 0xFF;
    }[/size][/font][/color]

[color=#000000][font=arial][size=3]    // сглаживаем только точки, цвета соседей которых отличается
    if($color == $color_x && $color == $color_y && $color == $color_xy){
      $newcolor=$color;
    }else{
      $frsx = $sx - floor($sx); //отклонение координат первообраза от целого
      $frsy = $sy - floor($sy);
      $frsx1 = 1 - $frsx;
      $frsy1 = 1 - $frsy;[/size][/font][/color]
[color=#000000][font=arial][size=3]      // вычисление цвета нового пикселя как пропорции от цвета основного пикселя и его соседей
      $newcolor = floor( $color    * $frsx1 * $frsy1 +
                         $color_x  * $frsx  * $frsy1 +
                         $color_y  * $frsx1 * $frsy  +
                         $color_xy * $frsx  * $frsy );
    }
    imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newcolor, $newcolor, $newcolor));
  }
}

Прикрепленное изображение

Посоветуйте ещё источники где подробно описан алгоритм для создания такой капчи.
Для тех кто напишет: "Проще взять готовую, чем самому писать", "Капчи уже бесполезны не используй их". Отвечаю: мне интересно разобраться и понять код, а использовать мне готовую или писать самому, я уже разберусь сам.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) 25.000каталогов+rss+captcha+мой проект+update+доски объявлений=10wmz
Отдача: тИЦ 10-40, PR 2-4.
6 streams 4156 11.2.2009, 22:28
автор: streams


 



RSS Текстовая версия Сейчас: 24.4.2024, 11:49
Дизайн