[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: капча
Страницы: 1, 2
Invis1ble
Привет всем! Просьба: просветите меня, каким макаром делается "геометрическое искажение" символов в изображении капчи. Если можно, приведите небольшой примерчик кода (искажения, а не капчи)...

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Lenarfate
да хотя бы вот так, рандомом

imagettftext($im, $size, rand(0, 45), rand($width * 0.1, $width - $width * 0.1),
rand($height * 0.2 , $height), $color, $font, $letter);

Invis1ble
Lenarfate
Это понятно, я имею ввиду как бы искривление символов (как в кривом зеркале)... Вот как например у тебя надпись на аватаре

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Lenarfate
ну с помошью той же gd. у этой библиотекм полно функций
Invis1ble
Lenarfate
искал подходящие для этих целей функции, но не нашел (английский знаю плоховато, поэтому в мануал не суюсь) sad.gif ... Приведи пример, если можешь

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Lenarfate
могу дать капчу, которой сам пользуюсь. там посмотришь код
Invis1ble
Lenarfate
Давай, очень интересно взглянуть

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Lenarfate
<?php

session_start();


$width = 100;
$height = 40;
$font_size = 12;
$let_amount = 5;
$back_let_amount = 30;
$path_fonts = 'fonts/';

$letters = array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm',
'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', '2', '3', '4', '5', '6', '7', '9'
);

$colors = array('10', '30', '50', '70', '90', '110',
'130', '150', '170', '190', '210'
);


$im = imagecreatetruecolor($width, $height);
$back = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $back);


$fonts = array();
$dir = opendir($path_fonts);

while($font_name = readdir($dir))
{
if($font_name !='.' && $font_name != '..')
$fonts[] = $font_name;
}

closedir($dir);


for($i = 0; $i < $back_let_amount; $i++)
{
$color = imagecolorallocatealpha($im, rand(0, 255), rand(0, 255), rand(0, 255), 100);

$font = $path_fonts . $fonts[rand(0, sizeof($fonts) - 1)];
$letter = $letters[rand(0, sizeof($letters) - 1)];
$size = rand($font_size - 2, $font_size + 2);

imagettftext($im, $size, rand(0, 45), rand($width * 0.1, $width - $width * 0.1),
rand($height * 0.2 , $height), $color, $font, $letter);
}

for($i = 0; $i < $let_amount; $i++)
{
$color = imagecolorallocatealpha($im, $colors[rand(0, sizeof($colors) - 1)],
$colors[rand(0, sizeof($colors) - 1)],
$colors[rand(0, sizeof($colors) - 1)], rand(20, 40));

$font = $path_fonts . $fonts[rand(0, sizeof($fonts) - 1)];
$letter = $letters[rand(0, sizeof($letters) - 1)];
$size = rand($font_size * 2.1 - 2, $font_size * 2.1 + 2);
$x = ($i + 1) * $font_size + rand(4, 7);
$y = (($height * 2) / 3) + rand(0, 5);
$code[] = $letter;

imagettftext($im, $size, rand(0, 15), $x, $y, $color, $font, $letter);
}


$_SESSION['captcha'] = implode('', $code);

header('Content-type: image/gif');
imagegif($im);
imagedestroy($im);


подключается в обычный <img />

проверяется так
if($_SESSION['captcha'] !== strtolower($_POST['captcha']))
print 'капча неверная'
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.