[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
Приветствую всех.
Эдуард пишет:
По меньшей мере, атрибуту src надо присвоить ссылку на php-скрипт, а не значение
функции.
Например, src="imagegen.php".
А уже в imagegen.php поместить весь код, генерирующий картинку (причем его не
надо оформлять как функцию).
Для отладки удобнее запускать непосредственно imagegen.php.
Успехов. Анатолий.