Отправляет email-рассылки с помощью сервиса Sendsay

[TC] Создать капчу

Доброго времени суток, друзья. Пытаюсь использовать функцию генерации картинки
некого Александра Беляева. В идиале функция должна выводить в браузер картинку
в PNG-файле.

generate_code- это функция, которая генерирует случайное число на основе текущей
даты и времени.

Наша исходная функция выглядит так:

function img_code()

{

// что бы не кэшировалась картинка

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // дата в прошлом

header("Last-Modified: " . gmdate("D, d M Y H:i:s", 10000) . " GMT"); // 1 января
1970

header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1

header("Cache-Control: post-check=0, pre-check=0", false); // еще раз, для надежности

header("Pragma: no-cache"); // HTTP/1.0

header("Content-Type:image/png");

$linenum = 2; // Число линий (для шума в картинке)

$img_arr = array( // массив с именами файлов-фонов

"codegen.png",

"codegen0.png"

);

$font_arr = array(); // массив со шрифтами

$font_arr[0]["fname"] = "04B_24__.TTF";

$font_arr[0]["size"] = 15;

$font_arr[1]["fname"] = "Kiloton.ttf";

$font_arr[1]["size"] = 9;

$n = rand(0,sizeof($font_arr)-1); // выбираем шрифт

$img_fn = $img_arr[rand(0, sizeof($img_arr)-1)]; // выбираем фон

$im = imagecreatefrompng (code_dir . $img_fn); // загружаем фон

for ($i=0; $i<$linenum; $i++) // шум в виде линий

{

$color = imagecolorallocate($im, rand(0, 255), rand(0, 200), rand(0, 255));

imageline($im, rand(0, 20), rand(1, 50), rand(150, 180), rand(1, 50), $color);

}

$color = imagecolorallocate($im, rand(0, 200), 0, rand(0, 200)); // цвет текста

imagettftext ($im, $font_arr[$n]["size"], rand(-4, 4), rand(10, 45), rand(20,
35), $color, code_dir.$font_arr[$n]["fname"], generate_code()); //сам текст в
пределах картинки

for ($i=0; $i<$linenum; $i++) // шум в виде линий

{

$color = imagecolorallocate($im, rand(0, 255), rand(0, 200), rand(0, 255));

imageline($im, rand(0, 20), rand(1, 50), rand(150, 180), rand(1, 50), $color);

}

ImagePNG ($im); // вывод изображения

ImageDestroy ($im); // Освобождаем память

}

Теперь пытаюсь сделать следующее:

<img src="<?=img_code()?>" alt="код подтверждения" border="0">

В браузере появляются кракозябры.

В чем может быть проблема?

Эдуард Воробьев

г. Ленинск-Кузнецкий

winks***@r*****.ru

Ответить   Sat, 5 Dec 2009 18:56:56 +0300 (#954011)

 

Ответы:

Приветствую всех.
Эдуард пишет:

По меньшей мере, атрибуту src надо присвоить ссылку на php-скрипт, а не значение
функции.
Например, src="imagegen.php".
А уже в imagegen.php поместить весь код, генерирующий картинку (причем его не
надо оформлять как функцию).
Для отладки удобнее запускать непосредственно imagegen.php.

Успехов. Анатолий.

Ответить   "i_chay" Sun, 6 Dec 2009 09:05:23 +0400 (#954324)