Xwab
Форумыnavigate_nextПрограммирование на PHP

Рандомное искажение
Сообщения
Spar

Всем привет. Подскажите, как сделать рандомное искажение символов в капче?

28 Окт 2010, 20:23
Spar

Что-то вроде того, которе сдесь стоит при создании темы.

28 Окт 2010, 20:23
Okula

Можно шрифт какой-нито использовать.

28 Окт 2010, 21:53
Spar

можно, но это не то..

28 Окт 2010, 22:05
Spar

Ну так что, никто не может помочь? Или дайте ссылочку на статью какую-нибудь пжл.

29 Окт 2010, 19:15
mixlion

ставить рандомный угол наклона на каждый символ, или ты о чем?

29 Окт 2010, 19:25
Nu3oN


<?php
function text($n=5)
{
    $key = '';
    $pattern = '1234567890abcdefghijklmnopqrstuvwxyz';
    $counter = strlen($pattern)-1;
    for($i=0; $i<$n; $i++)
    {
        $key .= $pattern{rand(0,$counter)};
    }
    return $key;
}
//Закатываем в $font путь к нашему шрифту
$font = dirname(__FILE__).'/comic.ttf';
//Инициализируем собсно класс
$image = new Imagick();
//Создаём картинку 150х50 и придаём фону белый цвет
$image->newImage(150, 50, new ImagickPixel('white'));
//Форматируем картинку. Придаём ей формат png
$image->setImageFormat('png');
//Инициализируем клас ImagickDraw
$draw = new ImagickDraw();
//Указываем шрифт
$draw->setFont($font);
//Придаём цвет тексту
$draw->setFillColor(new ImagickPixel('black'));
//Далее размер шрифта
$draw->setFontSize(38);
//Используем пыхофункцию для генерации случайного текста
$string = text();
//Состовляем текст. 25 - кол-во пикселей между текстом и гранью картинки по оси X, 35 - по оси Y
$draw->annotation(25,35,$string);
//Накладываем его на картинку
$image->drawImage($draw);
//Придаём искажение в виде завихрения против часовой стрелки на 30 градусов (если число отрицателльно - по часовой)
$image->swirlImage(30);
//Отсылаем заголовок о том что выводимые данные будут картинкой (png в нашем случае)
header('Content-type: image/png');
//Выводим картинку
echo $image;
//Разрушаем объект класса
$image->destroy();
?>


(c) http://pyha.ru/forum/topic/3287.0

29 Окт 2010, 21:59
Spar

mixlion, нет, угол - это угол. Посмотри на этом форуме, когда тему создаёшь, на картинке какие буквы, вот это и называется рандомное искажение. или посмотри в файле прикреплённом к посту 7

30 Окт 2010, 10:32
Spar

Nu3oN, спасибо за пример)

30 Окт 2010, 10:33
Spar

Nu3oN, блин, не получается. Как можно впихнуть тот код, что ты дал в этот?

<?php session_start();
header ("Content-type: image/gif");
$_SESSION['randgb'] = mt_rand(1111,9999);
$image = imagecreate(68,34);
$col_fon = imagecolorallocate($image, 255,255,255);
$col_text = imagecolorallocate($image,0,0,0);
$ttf = '2.ttf';
$x = 9;
$y = 25;
imagettftext($image, 20, 0, $x, $y, $col_text, $ttf, $_SESSION['randgb']);
imagegif($image);
imagedestroy($image);
?>

30 Окт 2010, 11:14
Ответить на тему