LINUX.ORG.RU

1. Генеришь хтмлку с цифрами.
2. перегоняешь ее в постскрипт (html2ps)
3. постскрипт в картинку скажем с разрешением в 72дпи(ghostscript: gs -q -sDEVICE=png16m  -r72 -dNOPAUSE -dBATCH -dSAFER -sOutputFile=tmp.png tmp.ps ), 
4. ресайзишь ее до нужного размера(ImageMagick, опция -resize. Только фильтр подбери посимпатичнее - опция -filter)

Вуаля!


Ну а в реальности например так:

    
      $imgcode = mt_rand(1000, 9999);
      Environment::SetSession('imgcode', $imgcode);
      
      $img = imagecreatefrompng('background.png');
      
      $fonts = array();      
      $dh = opendir('./fontfir');
      while ($file = readdir($dh))
        if (strtolower(strrchr($file, ".")) == ".ttf")
          $fonts[] = "./fontdir/" . $file;
      
      $imgcode = str_split($imgcode);
      for ($i = 0; $i <= count($imgcode); $i++) {
        $font = $fonts[mt_rand(0, count($fonts) - 1)];       
        $color = imagecolorallocate($img, mt_rand(0, 32), mt_rand(0, 128), mt_rand(0, 32));
        imagefttext($img, 16 + mt_rand(-1, 1), mt_rand(-10, 10), 5 + $i * 20 + mt_rand(-3, 3), 20 + mt_rand(-3, 3), $color, $font, $imgcode[$i]);
      }
      header("Content-type: image/png");
      imagepng($img);
      exit;

roller ★★★
()

я в своё время написал такую:

<?
session_start();
$img = @imagecreate (60, 20);
$bg = imagecolorallocate ($img, 232, 238, 247);
for ($i=0; $i<=128; $i++) {
$color = imagecolorallocate ($img, rand(0,255), rand(0,255), rand(0,255));
imagesetpixel($img, rand(2,80), rand(2,20), $color);
}
$x = rand(1, 9);
$y = rand(1, 9);
$_SESSION['xxx'] = $x;
$_SESSION['yyy'] = $y;
$char = "$x + $y = ";
$color = imagecolorallocate ($img, rand(0,255), rand(0,128), rand(0,255));
imagechar ($img, 7, 1, 3, $x, $color);
imagechar ($img, 7, 15, 4, '+', $color);
$color = imagecolorallocate ($img, rand(0,255), rand(0,128), rand(0,255));
imagechar ($img, 7, 30, 5, $y, $color);
imagechar ($img, 7, 45, 4, '=', $color);
header("Expires: Mon, 26 Jul 2010 05:00:00 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/jpeg");
imagejpeg($img);
?>

через переменные сессии передаём две цифры, а скрипт рисует запрос на их сумму ;-)

se ★★
()
Ответ на: комментарий от se

ой, все перепутал.. - наоборот, скрипт генерирует две случайные цифры и запоминает их в переменных сессии, а скрипт-обработчик уже сравнивает их сумму с переданным из формы значением.
посмотреть как оно выглядит можно тут - http://razdolie.ru/guest_main.php

se ★★
()
Ответ на: комментарий от se

Даже если вводить ответы рандомом, ну, скажем, от 2 до 18, я с вероятностью 1/16 пробьюсь. Сделал 160 запросов, намусорил 10 сообщений. А если 16000 запросов сделать?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.