конечно абзац навоял с математикой но зато вроде равномерно кажет
<?php
session_start();
$t = dirName(__FILE__).'/font/evanescent.ttf'; // адрес текстуры
$b = 'bdefhkmnprstuvwxyz';// буквы
$w = 250;// высота
$h = 60;// ширина
$n = 6; // число букв
$v = 0x000000;// цвет содержимого
$d = 0xFFDDA6;// цвет носителя
$l = strlen($b); // число буекв в списке
$a = $b{rand(0, $l-1)}; // выбираем рандомную букву
$captcha = imagecreatetruecolor($w, $h);// формируем обводку
imagefilledrectangle($captcha, 1, 1, $w-2, $h-2, $d); // формируем носитель
ImageArc($captcha, 120, 40, rand(200,220), rand(200,220), 0, 360, $v); ImageArc($captcha, 120, 40, rand(100,120), rand(150,180), 0, 360, $v);// рисуем круги
for ($c = 0; $c < 2000; $c++){ $xx = rand(0,$w); $yy = rand(0,$h); imagesetpixel($captcha, $xx, $yy, $v);} // вставляем шум
for ($i = 1; $i < $n; $i = strlen($a)){$r = $b{rand(0, $l)};if ($r != $a{$i - 1}){$a .= $r;}} // генерим буквы
for ($i = 0; $i < $n; $i++){ $o = ((($w-(2*(9/11)))/$n)*($i*(9/11))+15)+rand(6,8); imagettftext($captcha, rand(($h/4)*3,($h/3)*2), rand(18,25)-20, rand($o,($o+10)),rand(30,50), $v, $t, $a{$i});} // печатаем буквы
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 600) . 'GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header ("Content-type: image/png");
imagepng($captcha);
imagedestroy($captcha);
$_SESSION['captcha'] = md5($a);
?>