Помогите пожалуйста это сделать.
<?php
// Начинаем сессию, далее мы добавим в нее ключ
session_start();
// Получаю строку из пяти случайных символов
$string = getRandomString(5, 'lower');
// Задаем размеры капчи (самой картинки) в пикселях
$width = 108;
$height = 25;
// Строим пустое изображение. К высоте добавляется 15 пикселей, это будет белая
// полосочка снизу с текстом "press to change"
$captcha = imagecreatetruecolor($width, $height + 15);
// Получаю случайный цвет для фона
$bg = imagecolorallocate($captcha, mt_rand(10, 50), mt_rand(10, 50), mt_rand(10, 50));
// Определяю цвет фона для строки
$font_color = imagecolorallocate($captcha, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
$white = imagecolorallocate($captcha, 255, 255, 255);
$black = imagecolorallocate($captcha, 0, 0, 0);
// Заливаю капчу цветом фона, но оставляю снизу белую полоску
imagefill($captcha, 0, 0, $white);
imagefilledrectangle($captcha, 0, 0, $width, $height, $bg);
// "Разбрасываю" в случайном порядке четыре линии по капче. Цвета линий тоже
// определяются случайно
for ($i = 0; $i < 4; $i++)
{
// Создаю случайный цвет для очередной линии
$color = imagecolorallocate($captcha, mt_rand(170, 255), mt_rand(170, 255), mt_rand(170, 255));
// Черчу линию между двумя случайными точками
imageline(
$captcha,
mt_rand(0, $width - 1),
mt_rand(0, $height - 1),
mt_rand(0, $width - 1),
mt_rand(0, $height - 1),
$color
);
}
// Пишу эту случайную строку в капче
imagestring($captcha, 5, 33, 4, $string, $font_color);
// Указание пользователю
$how_refresh = 'press to change';
imagestring($captcha, 3, 2, 26, $how_refresh, $black);
// Сохраняю строку в сессии
$_SESSION['key'] = $string;
// Отсылаем заголовок браузеру, что ему сейчас будет передана картинка
header('Content-type: image/png');
// Отсылаем картинку в стандартный выходной поток (в браузер)
imagepng($captcha);
/**
* Генерирует строку случайных символов
*
* @param int $length - длина строки
* @param string $case - регистр генерируемых символов, может быть lower, upper,
* both. Если не передан ни один из вышеперечисленных, то
* используется lower
* @return string - строка, состоящая из случайных символов заданной длины
*
*/
function getRandomString($length, $case = 'lower')
{
/* Латинские символы, похожие на символы кирилицы:
* в ниженем регистре: a b c e o p x l
* в верхнем регистре: A B C E H K M O P T X
*/
$ban_chars = array('a', 'b', 'c', 'e', 'o', 'p', 'x', 'l',
'A', 'B', 'C', 'E', 'H', 'K', 'M', 'O', 'P', 'T', 'X');
// В зависимости от $case формирую массив диапазонов символов, из которых
// можно выбирать
switch ($case)
{
case 'upper':
$random_chars = range('A', 'Z');
break;
case 'both':
$random_chars = array_merge(range('a', 'z'), range('A', 'Z'));
break;
case 'lower':
default:
$random_chars = range('a', 'z');
break;
}
// Добавляю цифр (ноль похож на O_o, по этому игнорируем)
$random_chars = array_merge(range(1, 9), $random_chars);
// Удаляю неоднозначные символы
$random_chars = array_diff($random_chars, $ban_chars);
// Перемешиваю массив
shuffle($random_chars);
// Беру первые $length элементов
$chars = array_slice($random_chars, 0, $length);
// Соединяю их в строку и - марш на выход.
return implode('', $chars);
}
Спустя 18 минут, 26 секунд (16.12.2011 - 02:52) caballero написал(а):
так убери строку из текста и все дела
или закоментируй imagestring($captcha, 3, 2, 26, $how_refresh, $black);
$white = $black и все дела
или закоментируй imagestring($captcha, 3, 2, 26, $how_refresh, $black);
$white = $black и все дела
Спустя 10 минут, 53 секунды (16.12.2011 - 03:03) xJlaIIax написал(а):
Текст исчезнет, но генерация не нужного фона, прибавление не нужных 15 пиксилей останется и т.д.
Спустя 4 минуты, 22 секунды (16.12.2011 - 03:08) xJlaIIax написал(а):
Можно в начале дупо поменять
$captcha = imagecreatetruecolor($width, $height + 15);
на
$captcha = imagecreatetruecolor($width, $height);
Но это не желательно, потому что скрипт будет делать кучу не нужных вещей связанных с надписью "press to change".
$captcha = imagecreatetruecolor($width, $height + 15);
на
$captcha = imagecreatetruecolor($width, $height);
Но это не желательно, потому что скрипт будет делать кучу не нужных вещей связанных с надписью "press to change".
Спустя 31 минута, 48 секунд (16.12.2011 - 03:39) xJlaIIax написал(а):
Вот вроде всё не нужное за комментировал, проверь пожалуйста:
<?php
// Начинаем сессию, далее мы добавим в нее ключ
session_start();
// Получаю строку из пяти случайных символов
$string = getRandomString(5, 'lower');
// Задаем размеры капчи (самой картинки) в пикселях
$width = 108;
$height = 25;
// Строим пустое изображение. К высоте добавляется 15 пикселей, это будет белая
// полосочка снизу с текстом "press to change"
$captcha = imagecreatetruecolor($width, $height /*+ 15*/);
// Получаю случайный цвет для фона
// $bg = imagecolorallocate($captcha, mt_rand(10, 50), mt_rand(10, 50), mt_rand(10, 50));
// Определяю цвет фона для строки
$font_color = imagecolorallocate($captcha, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
// $white = imagecolorallocate($captcha, 255, 255, 255);
// $black = imagecolorallocate($captcha, 0, 0, 0);
// Заливаю капчу цветом фона, но оставляю снизу белую полоску
// imagefill($captcha, 0, 0, $white);
// imagefilledrectangle($captcha, 0, 0, $width, $height, $bg);
// "Разбрасываю" в случайном порядке четыре линии по капче. Цвета линий тоже
// определяются случайно
for ($i = 0; $i < 4; $i++)
{
// Создаю случайный цвет для очередной линии
$color = imagecolorallocate($captcha, mt_rand(170, 255), mt_rand(170, 255), mt_rand(170, 255));
// Черчу линию между двумя случайными точками
imageline(
$captcha,
mt_rand(0, $width - 1),
mt_rand(0, $height - 1),
mt_rand(0, $width - 1),
mt_rand(0, $height - 1),
$color
);
}
// Пишу эту случайную строку в капче
imagestring($captcha, 5, 33, 4, $string, $font_color);
// Указание пользователю
// $how_refresh = 'press to change';
// imagestring($captcha, 3, 2, 26, $how_refresh, $black);
// Сохраняю строку в сессии
$_SESSION['key'] = $string;
// Отсылаем заголовок браузеру, что ему сейчас будет передана картинка
header('Content-type: image/png');
// Отсылаем картинку в стандартный выходной поток (в браузер)
imagepng($captcha);
/**
* Генерирует строку случайных символов
*
* @param int $length - длина строки
* @param string $case - регистр генерируемых символов, может быть lower, upper,
* both. Если не передан ни один из вышеперечисленных, то
* используется lower
* @return string - строка, состоящая из случайных символов заданной длины
*
*/
function getRandomString($length, $case = 'lower')
{
/* Латинские символы, похожие на символы кирилицы:
* в ниженем регистре: a b c e o p x l
* в верхнем регистре: A B C E H K M O P T X
*/
$ban_chars = array('a', 'b', 'c', 'e', 'o', 'p', 'x', 'l',
'A', 'B', 'C', 'E', 'H', 'K', 'M', 'O', 'P', 'T', 'X');
// В зависимости от $case формирую массив диапазонов символов, из которых
// можно выбирать
switch ($case)
{
case 'upper':
$random_chars = range('A', 'Z');
break;
case 'both':
$random_chars = array_merge(range('a', 'z'), range('A', 'Z'));
break;
case 'lower':
default:
$random_chars = range('a', 'z');
break;
}
// Добавляю цифр (ноль похож на O_o, по этому игнорируем)
$random_chars = array_merge(range(1, 9), $random_chars);
// Удаляю неоднозначные символы
$random_chars = array_diff($random_chars, $ban_chars);
// Перемешиваю массив
shuffle($random_chars);
// Беру первые $length элементов
$chars = array_slice($random_chars, 0, $length);
// Соединяю их в строку и - марш на выход.
return implode('', $chars);
}