Existem varias formas de se fazer isso, algumas formas tiveram problema acredito por causa da biblioteca GD, se vc não as tem instaladas.
su
emerge php5-gd
O código abaixo está todo comentado para causar o entendimento.
<?php
//INICIAR A SESSION
session_start();
//INICIAR O HEADER
header('Content-Type: image/png');
//puxar a imagem, vc deve ter essa imagem na pasta, pois ela servirá de base.
$image = imagecreatefrompng("captcha.jpg") or die ("Não foi possível iniciar a imagem.");
//carregar a fonte, tem de ser no formato gdf, neste caso, google-a
$fonte = imageloadfont("anonymous.gdf");
//quantidade de caracteres, shuffle para embaralhar e 4 caracteres somente q eu escolhi
$texto = substr(str_shuffle("AaBbCcDdEeFfGgHhIiJjKkLlMmNnPpQqRrSsTtUuVvYyXxWwZz23456789"),0,4);
//salvar a session
$_SESSION['capcad'] = $texto;
//indicar a cor da fonte
$cor = imagecolorallocate($image,0,0,0);
//junção da imagem com o texto, os numeros referenciam a posição da imagem
imagestring($image, $fonte, 50, 10, $texto, $cor);
//mostrar imagem
imagepng($image);
//liberar memória
imagedestroy($image);
?>