Построение CAPTCHA, используя свои функции. Передача параметров.

vitalycrash

Новичок
Построение CAPTCHA, используя свои функции. Передача параметров.

Здравствуйте!
Есть небольшая мысль: создавание изображения используя свои функции, т.е. Icreate создает изображение, даллее Icolor добавляет цвет на изображение,...Столкнулся с проблемой передача параметрови результата функции следующей функции( Создалось изображение-передалось на след. функцию, добавился цвет и уже изображение с цветом идёт дальше) Толкните пожалуйста в то русло в котором надо искать, либо подскажите как сделать, чтобы лучше. Приведу примеры. Пример изображения:
PHP:
session_save_path("H:/xampp/Session");
session_start();
class MyCaptcha {
	var $font = 'arial.ttf';
	function generateCode($characters) {
		$possible = '23456789bcdfghjkmnpqrstvwxyz'; 
		$code = '';
		$i = 0;
		while ($i < $characters) { 
			$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
			$i++;
		}
		return $code;
	}
	function MyCaptcha($width='80',$height='30',$characters='5') {
		$code = $this->generateCode($characters);
		/* font size will be 75% of the image height */
		$font_size = $height * 0.35;
		$image = @imagecreate($width, $height) or die('Cannot Initialize new GD image stream');
		/* set the colours */
		$background_color = imagecolorallocate($image, 255, 255, 255);
		$text_color = imagecolorallocate($image, 20, 40, 100);
		$noise_color = imagecolorallocate($image, 100, 120, 180);
		/* tochki */
		for( $i=0; $i<($width*$height)/3; $i++ ) {
			imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 2, 1, $noise_color);
		}
		/* linii */
		for( $i=0; $i<($width*$height)/150; $i++ ) {
			imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(3,$width), mt_rand(0,$height), $noise_color);
		}
		/* create textbox and add text */
		$textbox = imagettfbbox($font_size, 2, $this->font, $code);
		$x = 30;
		$y = ($height - $textbox[5])/2;
		imagettftext($image, $font_size, 15, $x, $y, $text_color, $this->font , $code);
		/* output captcha image to browser */
		imagejpeg($image);
		imagedestroy($image);
		$_SESSION['security_code'] = $code;
	}

}
$width = isset($_GET['width']) ? $_GET['width'] : '180';
$height = isset($_GET['height']) ? $_GET['height'] : '60';
$characters = isset($_GET['characters']) ? $_GET['characters'] : '5';
header('Content-Type: image/jpeg');
$captcha = new MyCaptcha($width,$height,$characters);
session_destroy();
Должно получится что то вроде:
PHP:
session_start();
class ICreate
{
	function ICreate($width,$height,$color)
	{
		$image = @imagecreate($width, $height);
		imagejpeg($image);
		imagedestroy($image);
	}
	 		function IColor($image,$color)
			{
			if(is_array($color)){
     		return imagecolorallocate($image, $color[0], $color[1], $color[2]);
			}
}

$width = isset($_GET['width']) ? $_GET['width'] : '180';
$height = isset($_GET['height']) ? $_GET['height'] : '60';
$characters = isset($_GET['characters']) ? $_GET['characters'] : '5';

header('Content-Type: image/jpeg');
$c = new ICreate($width,$height,$characters);
session_destroy();
Вроде всё написал. И учёл все правила. Буду благодарен за помощь. Зараннее спасибо!
 

Фанат

oncle terrible
Команда форума
всё написал. И учёл все правила.
вот только вопрос совершенно непонятен.
 

vitalycrash

Новичок
Автор оригинала: Фанат
всё написал. И учёл все правила.
вот только вопрос совершенно непонятен.
Как правильнее так сделать: создать свои функции, которые используют функции GD для создания защитного изображения?
Как правильно передавать параметры между функциями?
 

Фанат

oncle terrible
Команда форума
для начала непонятно, зачем нужны эти функции.
вроде бы, функция нужна только одна - создающая изображение.
зачем нужны другие?

параметры всю жизнь передавались стандартно - функция возвращает значение
 

kruglov

Новичок
Как угодно.

Что значит "как правильно"?
Чтоб хакер не перехватил?
Чтоб по дороге не потерялись?
Чтоб кошерно было?
 

vitalycrash

Новичок
1. Для чего нужны функции: можно сказать мой каприз, но вообще это надо мне.
2. CAPTCHA-изображение с шумами, разного цвета с символами, которые необходимо ввести.
3. Стандартно-это..
PHP:
class ICreate 
{ 
    function ICreate($width,$height,$color) 
    { 
        $image = @imagecreate($width, $height); 
        imagejpeg($image); 
        imagedestroy($image); 
    } 
             function IColor($image,$color) 
            { 
            if(is_array($color)){ 
             return imagecolorallocate($image, $color[0], $color[1], $color[2]); 
            } 
}
Но будет очень много параметров. И либо я ничего не понимаю, либо подскажите как..?
 

kruglov

Новичок
По-хорошему, публичных методов у CAPTCHA должно быть 1, от силы 2 - конструктор и возвращатель кодового текста, IMHO

-~{}~ 17.05.07 20:17:

Ну, если очень много параметров, передавайте массивом:

captcha ( array('color'=>'red', 'width'=>150, 'string'=>'hello') )
 

vitalycrash

Новичок
Правильно! Правильно! Так вот я как раз и спрашиваю про конструтор. Ну и про текст:создать свои функции для этого.

-~{}~ 17.05.07 20:21:

Автор оригинала: kruglov
Как угодно.

Что значит "как правильно"?
Чтоб хакер не перехватил?
Чтоб по дороге не потерялись?
Чтоб кошерно было?
Нет-нет! Про картинку "как правильно" не имеет отношения. Как правильно передавать параметры между функциями: как я понимаю в первой функции будут все параметры из дальше идущих?-это много! Можно ли сделать по другому?
 

Anarki

Новичок
vitalycrash
Кстати а зачем вот это?
PHP:
$width = isset($_GET['width']) ? $_GET['width'] : '180'; 
$height = isset($_GET['height']) ? $_GET['height'] : '60'; 
$characters = isset($_GET['characters']) ? $_GET['characters'] : '5';
Чтобы пользователи сами выбирали размер и число символов в капче? :D
 

vitalycrash

Новичок
Автор оригинала: Anarki
vitalycrash
Кстати а зачем вот это?
PHP:
$width = isset($_GET['width']) ? $_GET['width'] : '180'; 
$height = isset($_GET['height']) ? $_GET['height'] : '60'; 
$characters = isset($_GET['characters']) ? $_GET['characters'] : '5';
Чтобы пользователи сами выбирали размер и число символов в капче? :D
Это вывод изображения! Не пользователи, создатель скрипта задает размер изображения и количество символов на нем.
 

kruglov

Новичок
По опыту пользования юзерами моей www.captcha.ru/kcaptcha могу сказать, что иногда лучше им давать поменьше возможностей для "кастомизации".

Отключат или подключат, наоборот, какую-нибудь фишку, о надобности которой для читабельности и для безопасности я много думал, и думают, что "улучшили".
 

kruglov

Новичок
Не пользователи, создатель скрипта задает размер изображения и количество символов на нем
Хых, я злой хакер, вызвал ваш скрипт с ?characters=1, получил в сессию одноциферный код и угадал его с нескольких попыток.
 

vitalycrash

Новичок
Зачем же вы такие злые? Зачем прицепились к картинке? Не в картинке дело а создать набор функций, создающих эту картинку, своих функций а не ГД?
 

Фанат

oncle terrible
Команда форума
А ты, видимо, не очень настроен читать, что тебе пишут.
 

vitalycrash

Новичок
Автор оригинала: Фанат
А ты, видимо, не очень настроен читать, что тебе пишут.
Ну так вы привязались к моему примеру, а про функции ничего не сказали! Буду дальше искать. Спасибо всё равно, за потраченное время!
 
Сверху