Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php captcha wave effect / 25 сообщений из 28, страница 1 из 2
18.10.2011, 19:58
    #37487683
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
не пойму что за гавно получается

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
 function  MultiWave($img)
{

$width= imagesx ($img);
$height= imagesy ($img);

$img2= imagecreatetruecolor ($width, $height);

$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;
    }



    // сглаживаем только точки, цвета соседей которых отличается
     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;

      // вычисление цвета нового пикселя как пропорции от цвета основного пикселя и его соседей
      $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));
  }
}

 return  $img2;
}    

 session_start ();
 error_reporting ( 1 );
$keystring =  substr ( md5 ( mt_rand ( 0 ,  1024  *  1024 )),  0 ,  6 );
$_SESSION["captcha_keystring"] = $keystring;
$img =  imagecreatetruecolor ( 180 ,  80 );
// $background = imagecolorallocate($img, 255, 255, 255);
$color =  imagecolorallocate ($img,  237 ,  63 ,  40 );
 imagettftext ($img,  18 ,  0 ,  32 ,  54 , $color, "fonts/badaboom.ttf", $keystring);
$img2 = MultiWave($img);
 header ("Expires: Wed, 1 Jan 1997 00:00:00 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 ($img2);
 imagedestroy ($img2);

...
Рейтинг: 0 / 0
18.10.2011, 19:59
    #37487685
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
а вот без применения этой функции. не пойму как сделать? какая-то хрень и танцы с бубном
...
Рейтинг: 0 / 0
18.10.2011, 20:01
    #37487692
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
вопросы у меня следующие:

1) куда пропадает оранжевый
2) почему края белые
3) почему текст белый
...
Рейтинг: 0 / 0
19.10.2011, 08:22
    #37488129
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_troll,

автор $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;
Может дело в том что imagecolorat возращает индекс в палитре а не хекс цвета?
...
Рейтинг: 0 / 0
19.10.2011, 11:16
    #37488392
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
Ренат,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    } 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;
       var_dump ($color, $color_x, $color_y, $color_xy);
       echo  "<br />";
    }

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 ) 
int( 0 ) int( 0 ) int( 0 ) int( 0 )

по побитовому сдвигу очевидно что выполняется какое-то магическое действо

пример из мануала
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?php
$im =  imagecreatefrompng ("php.png");
$rgb =  imagecolorat ($im,  10 ,  15 );
$r = ($rgb >>  16 ) & 0xFF;
$g = ($rgb >>  8 ) & 0xFF;
$b = $rgb & 0xFF;

 var_dump ($r, $g, $b);
?>

т.е. в этой ф-ии определяется только красный, а ф-ия

$color = imagecolorallocate($img, 255, 255, 255);
var_dump($color);

возвращает знаечение

16777215 (255 ^ 3)

А зачем тогда спрашивается нужна ф-ия imagecolorallocate, зачем в неё передаётся в качестве аргумента $img(ну первый раз понятно задаётся фон)?

я не пойму эта нерабочая ф-ия чтоли была намеренно выложена или у меня руки кривые
...
Рейтинг: 0 / 0
19.10.2011, 11:28
    #37488422
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_troll,

к примеру посмотрите описание png.
вы никогда не замечали что в png ограниченый набор цветов(устанавлвиаеться дизайнером)?
у него есть своя таблица цветов. ЧТобы отобразить в этой пнгшке какой либо цвет, надо соотвественно зарегистрировать в этой таблице этот цвет.
Вот функци imagecolorallocate и делает регистрацию цвета в табоице цветов.
Так что пользуйтесь функциями imagecolorat, imagecolorallocate и imagecolorsforindex для определения цвета и установки на изображении.
...
Рейтинг: 0 / 0
19.10.2011, 11:30
    #37488426
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
задаю явно цвет без имейджколорат

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 session_start ();
 error_reporting ( 1 );
$keystring =  substr ( md5 ( mt_rand ( 0 ,  1024  *  1024 )),  0 ,  6 );
$_SESSION["captcha_keystring"] = $keystring;
$img =  imagecreatetruecolor ( 180 ,  80 );
// $background = imagecolorallocate($img, 255, 255, 255);
$color =  imagecolorallocate ($img,  255 ,  255 ,  255 );

// var_dump($color);
// 120 * 120 * 120 = 1728000
 imagettftext ($img,  18 ,  0 ,  32 ,  54 ,  1728000 , "fonts/badaboom.ttf", $keystring);
// $img2 = MultiWave($img);
 header ("Expires: Wed, 1 Jan 1997 00:00:00 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 ($img);
 imagedestroy ($img);

картинка зелёная а хотя rgb(120, 120, 120) серый, значит что-то ещё происходит
...
Рейтинг: 0 / 0
19.10.2011, 11:32
    #37488428
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_trollя не пойму эта нерабочая ф-ия чтоли была намеренно выложена или у меня руки кривые
второе.
для выпрямления срочно читайте мануал до полного понимания того что одна из них возвращает цвет запрошенного пиксела, а вторая устанавливает цвет, которым потом можно пользоваться в других функциях...
...
Рейтинг: 0 / 0
19.10.2011, 11:40
    #37488457
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_troll// 120 * 120 * 120 = 1728000

это что за бред?
imagecolorallocate() работает совсем не так.
для начала, разберитесь что такое битовые сдвиги, и почему нужно делать $r = ($rgb >> 16) & 0xFF;
...
Рейтинг: 0 / 0
19.10.2011, 12:11
    #37488525
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
r u, при чём тут мануал там получаются только красные цвета, функция не моя
...
Рейтинг: 0 / 0
19.10.2011, 12:15
    #37488535
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
r u,

вот получили красные

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 if ($color == $color_x && $color == $color_y && $color == $color_xy){ // если все 255 например, то $newcolor 255
      $newcolor=$color;
    } else {
      $frsx = $sx -  floor ($sx); //отклонение координат первообраза от целого
      $frsy = $sy -  floor ($sy);
      $frsx1 =  1  - $frsx;
      $frsy1 =  1  - $frsy;

      // вычисление цвета нового пикселя как пропорции от цвета основного пикселя и его соседей
      // что это за жопа, зачем умножаются оттенки красного на координаты и складываются?
      $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));
...
Рейтинг: 0 / 0
19.10.2011, 13:31
    #37488773
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
я в гугле смотрел image distortion algorithms ничего нет как будто никто ничего не знает, а что самое обидное так это за рашку ибо ни наших математиков ни программистов такое ощущение что вообще не существует, что в принципе доказывает теорему о том что 99% россиян дебилы и интеллектуальном превосходстве англосаксов(хотя среди них процент умственно отсталых намного выше)
...
Рейтинг: 0 / 0
19.10.2011, 13:37
    #37488795
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
вот и получается кодомакак миллионы, а программистов единицы, а со всякими библиотеками и фреймворками даже думать не надо, мир и в правду ужасен так гляди и через 50 лет нас поработят роботы
...
Рейтинг: 0 / 0
19.10.2011, 13:39
    #37488806
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_troll, http://bookinist.net/books/bookid-1019.html даже книг на русском нет всё эта непонятная дрочка на OpenGL и DirectX
...
Рейтинг: 0 / 0
19.10.2011, 14:02
    #37488877
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_trollgreen_troll, http://bookinist.net/books/bookid-1019.html даже книг на русском нет всё эта непонятная дрочка на OpenGL и DirectX
Зачем вам ОпенДжиэль и Дирекикс?
До вас милионы проограмистов писали и ниче, а у вас как всегда что то не так...
протестил ваш код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
<?php
 function  MultiWave($img){
	$width= imagesx ($img);
	$height= imagesy ($img);
	$img2= imagecreatetruecolor ($width, $height);

	$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;
			}



			// сглаживаем только точки, цвета соседей которых отличается
			 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;

				// вычисление цвета нового пикселя как пропорции от цвета основного пикселя и его соседей
				$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));
		}
	}

	 return  $img2;
}    

 session_start ();
 error_reporting ( 1 );
$keystring =  substr ( md5 ( mt_rand ( 0 ,  1024  *  1024 )),  0 ,  6 );
$img =  imagecreatetruecolor ( 180 ,  80 );
//$color = imagecolorallocate($img, 255, 255, 255);
//imagefilledrectangle($img,0,0,180,80,$color);
$color =  imagecolorallocate ($img,  237 ,  63 ,  40 );
 imagettftext ($img,  18 ,  0 ,  32 ,  54 , $color, "badaboom.ttf", $keystring);
$img2 = MultiWave($img);
 header ("Expires: Wed, 1 Jan 1997 00:00:00 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 ($img2);

Никаких красных цветов нет, и я не знаю где вы их нашли.
Имхо используйте готовые библиотеки такие как reCaptcha и будет вам счастье, и нервы програмистов sql.ru поэкономите заодно.
...
Рейтинг: 0 / 0
19.10.2011, 14:23
    #37488929
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
Ренат, а никаких красных(оттенок красного там с помощью побитового сдвига получается зеленый синий игнорируются затем красный на координаты умножается) и недолжно быть получилось тоже самое что и у меня, у меня было оранжевй текст на черном фоне после преобразований получилось белый за пределами первоначального изображения черный на месте вместо оранжевого белый
...
Рейтинг: 0 / 0
19.10.2011, 14:28
    #37488947
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
а если изображение на белом фоне то вообще черное полотно и чуть-чуть белого по краям
...
Рейтинг: 0 / 0
19.10.2011, 14:44
    #37488986
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_troll,

вы сами пишите
Код: plaintext
 imagesetpixel ($img2, $x, $y,  imagecolorallocate ($img2, $newcolor, $newcolor, $newcolor));
ежику очевидно, что тут определяеться какой то серый цвет. Только серый. Что тут паранормального? Куда оранжевый исчез?
...
Рейтинг: 0 / 0
19.10.2011, 14:53
    #37489005
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
Ренат, то не мой код, я в геометрии уже совсем не секу

вот ещё пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    // http://php.net/manual/ru/function.imagecopy.php
     function  wave_region($img, $x, $y, $width, $height,$amplitude =  4 . 5 ,$period =  30 )
     {
         // Make a copy of the image twice the size
         $mult =  2 ;
         $img2 =  imagecreatetruecolor ($width * $mult, $height * $mult);
          imagecopyresampled  ($img2,$img, 0 , 0 ,$x,$y,$width * $mult,$height * $mult,$width, $height);

         // Wave it
          for  ($i =  0 ;$i < ($width * $mult);$i +=  2 )
         {
             imagecopy ($img2,$img2,
                $x + $i -  2 ,$y +  sin ($i / $period) * $amplitude,    // dest
                $x + $i,$y,            // src
                 2 ,($height * $mult));
         }
         
         // Resample it down again
          imagecopyresampled  ($img,$img2,$x,$y, 0 , 0 ,$width, $height,$width * $mult,$height * $mult);
          imagedestroy ($img2);
     }
эта ф-ия работает но картинка получается с неровными краями
...
Рейтинг: 0 / 0
19.10.2011, 14:54
    #37489006
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
у букав
...
Рейтинг: 0 / 0
19.10.2011, 16:45
    #37489261
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
блин хотелось эффект добавить, но ничего такая каптча тоже сойдёт
...
Рейтинг: 0 / 0
19.10.2011, 16:46
    #37489264
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
не то прикрепил
...
Рейтинг: 0 / 0
19.10.2011, 17:10
    #37489318
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_troll,

Очень удивляюсь тому факту, что Вы до сих пор не забанены.
...
Рейтинг: 0 / 0
19.10.2011, 17:24
    #37489341
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
green_trollя в гугле смотрел image distortion algorithms
так и не будет.
выигрышная стратегия писания на php заключается в умелом использовании функций написанных на C. всякие там gd и imagemagic.
какой смысл на скриптовом языке изображать математику?
это же капча. пользователь должен ее по 4 раза прочитать. они вам сайт положат.
...
Рейтинг: 0 / 0
19.10.2011, 22:51
    #37489757
green_troll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php captcha wave effect
посмотрел исходники кал каптчи автор намеренно выложил нерабочий код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
// periods
		$rand1= mt_rand ( 750000 , 1200000 )/ 10000000 ;
		$rand2= mt_rand ( 750000 , 1200000 )/ 10000000 ;
		$rand3= mt_rand ( 750000 , 1200000 )/ 10000000 ;
		$rand4= mt_rand ( 750000 , 1200000 )/ 10000000 ;
		// phases
		$rand5= mt_rand ( 0 , 31415926 )/ 10000000 ;
		$rand6= mt_rand ( 0 , 31415926 )/ 10000000 ;
		$rand7= mt_rand ( 0 , 31415926 )/ 10000000 ;
		$rand8= mt_rand ( 0 , 31415926 )/ 10000000 ;
		// amplitudes
		$rand9= mt_rand ( 330 , 420 )/ 110 ;
		$rand10= mt_rand ( 330 , 450 )/ 110 ;

		//wave distortion

		 for ($x= 0 ;$x<$width;$x++){
			 for ($y= 0 ;$y<$height;$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 ){
					 continue ;
				} else {
					$color= imagecolorat ($img, $sx, $sy) & 0xFF;
					$color_x= imagecolorat ($img, $sx+ 1 , $sy) & 0xFF;
					$color_y= imagecolorat ($img, $sx, $sy+ 1 ) & 0xFF;
					$color_xy= imagecolorat ($img, $sx+ 1 , $sy+ 1 ) & 0xFF;
				}

				 if ($color== 255  && $color_x== 255  && $color_y== 255  && $color_xy== 255 ){
					 continue ;
				} else   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 {
					$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));
			}
		}
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php captcha wave effect / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]