<?php
session_start();
$gen=5; // кол-во символов на капче
$width=110; // ширина капчи
$height=40; // высота капчи
$min=20; // минимальный размер шрифта
$max=30; // максимальный размер шрифта
$ras=19; // расстояние между символами
$posit=$ras*1.3; // средняя вертикальная позиция текста на капче
$sangle=20; // средний угол наклона
$pixel=30; // загрязнение пикселями
$c=sizeof($code)-1; // считаем размер массива с символами
$_SESSION['code'] = '';
for($i=0;$i<$gen;$i++) $_SESSION['code'] .= rand(1000,99999); // заносим в сессию символы
$img=imagecreate($width,$height);
imagecolorallocate($img, mt_rand(0,50), mt_rand(0,50), mt_rand(0,50)); // генерируем случайный цвет фона
for($i=0;$i<3;$i++){ // наносим подтекстовое загрязнение
$cx=mt_rand(1,$width); // горизонтальная позиция начала эллипса
$cy=mt_rand(1,$height); // вертикальная позиция начала эллипса
$x=mt_rand(1,$width); // ширина эллипса
$y=mt_rand(1,$height); // высота эллипса
$e=mt_rand(0,360); // заполнение по градусам
$color=imagecolorallocate($img, mt_rand(0,150), mt_rand(0,150), mt_rand(0,150)); // цвет эллипса
imagefilledarc($img,$cx,$cy,$x,$y,$e,1,$color,IMG_ARC_EDGED); // рисуем эллипсы под текстом
}
for($i=0;$i<$gen;$i++){ // наносим код
$size=mt_rand($min,$max); // размер шрифта
$angle=mt_rand(-$sangle,$sangle); // угол наклона текста
$x=$ras/2+$ras*$i; // горизонтальная позиция начала текста
$y=mt_rand($posit/1.3,$posit*1.3); // вертикальная позиция начала текста
$color=imagecolorallocate($img, mt_rand(150,255), mt_rand(150,255), mt_rand(150,255)); // цвет кода
imagettftext($img, $size, $angle, $x, $y, $color, 'ttf/'.rand(1,5).'.ttf', mb_substr($_SESSION['code'],$i,1));
}
$_SESSION['code'] = mb_substr($_SESSION['code'],0,5);
for($i=0;$i<$pixel;$i++){ // загрязнение пикселями и линиями
$y=mt_rand(1,$height); // вертикальная позиция пикселя
$x=mt_rand(1,$width); // горизонтальная позиция пикселя
$color=imagecolorallocate($img, mt_rand(150,255), mt_rand(150,255), mt_rand(150,255)); // цвет пикселя
imagesetpixel($img,$x,$y,$color); // наносим пиксель
// дальше наносим линии
if(is_int($i/3)){ // рисуем линии тогда, когда $i ровно делится на 3
$x1=mt_rand(1,$width); // начальная горизонтальная позиция линии
$y1=mt_rand(1,$width); // начальная вертикальная позиция линии
$x2=mt_rand(1,$width); // конечная горизонтальная позиция линии
$y2=mt_rand(1,$width); // конечная вертикальная позиция линии
$color=imagecolorallocate($img, mt_rand(0,150), mt_rand(0,150), mt_rand(0,150));
for($j=0;$j<2;$j++){
imageline($img,$x1+$j,$y1+$j,$x2+$j,$y2+$j,$color);
}
}
}
header("Content-type: image/gif");
imagegif($img);
imagedestroy($img);
?>