Генерация арифметической капчи
В редакторе
Генерация арифметической капчи
Brain_Script
890
2019-07-12 11:02:57
// шрифт
$font = 'impact.ttf';
// Размер шрифта
$fontsize = 20;
// Размер капчи
$width = 120;
$height = 40;
// придумываем пример для капчи
$a = mt_rand(1, 19);
$b = mt_rand(1, 19);
$capchaText = $a . '+' . $b . '=';
// Ответ на пример
$capchaResult = $a + $b;
// создаем изображение
$img = imagecreatetruecolor($width, $height);
// фон
$white = imagecolorallocate($img, 220, 220, 220);
imagefill($img, 0, 0, $white);
// Заполняем изображение символами
for ($i = 0; $i < strlen($capchaText); $i++){
// Из списка символов, берем случайный символ
$litteral = $capchaText[$i];
// Вычисляем положение одного символа
$x = ($width - 20) / strlen($capchaText) * $i +10;
$y = $height - (($height - $fontsize) / 2);
// Сгенерируем случайный цвет для символа.
$color = imagecolorallocate(
$img, rand(0, 150),
rand(0, 150), rand(0, 150)
);
// Генерируем угол наклона символа
$naklon = rand(-10, 10);
// Рисуем один символ
imagettftext(
$img, $fontsize, $naklon, $x, $y,
$color, $font, $litteral
);
}
// Добавим на капчу несколько рандомных полосок
for ($i = 0; $i < $countLine; $i++){
// сгенерируем координаты для линии
$part = $width/100; // длина картинки в процентах
// x1 не больше чем до 30% картинки
$x1 = mt_rand(0, round($part*30));
$y1 = mt_rand(0, $height);
// x2 не меньше чем от 70% картики
$x2 = mt_rand(round($part*70), round($part*100));
$y2 = mt_rand(0, $height);
// сгенерируем случайный цвет для линии
$color = imagecolorallocate(
$img, rand(0, 150),
rand(0, 150), rand(0, 150)
);
imageline ($img, $x1, $y1, $x2, $y2, $color);
}
// заголовок для браузера
header('Content-type: image/png');
// вывод капчи на страницу
imagepng($img);
// чистим память
imagedestroy($img);
Войдите для добавления комментария.