Простой PHP скрипт, не отображающий текст на изображении

Я надеялся связаться с кем-то в ситуации, когда я нигде не могу найти решение.

Я пытаюсь создать капчу на своем веб-сайте, используя php, и хотя мне удалось создать изображение и создать произвольный текст капчи.

Я не могу их перебить. Вот мой код:

<?PHP

session_start();function generateRandomString($length = 10) {
$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$len = strlen($letters);
$letter = $letters[rand(0, $len - 1)];
$text_color = imagecolorallocate($image, 0, 0, 0);
$word = "";
for ($i = 0; $i < 6; $i++) {
$letter = $letters[rand(0, $len - 1)];
imagestring($image, 7, 5 + ($i * 30), 20, $letter, $text_color);
$word .= $letter;
}
$_SESSION['captcha_string'] = $word;

}function security_image(){

// $code = isset($_SESSION['captcha']) ? $_SESSION['captcha'] : generate_code();
//$font = 'content/fonts/comic.ttf';

$width = '110';
$height = '20';
$font_size = $height * 0.75;
// $image = @imagecreate($width, $height) or die('GD not installed');
global $image;
$image = imagecreatetruecolor($width, $height) or die("Cannot Initialize new GD image stream");

$background_color = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,200,50,$background_color);$line_color = imagecolorallocate($image, 64,64,64);
for($i=0;$i<10;$i++) {
imageline($image,0,rand()%50,200,rand()%50,$line_color);
}

$pixel_color = imagecolorallocate($image, 0,0,255);
for($i=0;$i<1000;$i++) {
imagesetpixel($image,rand()%200,rand()%50,$pixel_color);
}

//$textbox = imagettfbbox($font_size, 0, $font, $code);
//$textbox = imagettfbbox($font_size, 0, $randomString);

$x = ($width - $textbox[4]) / 2;
$y = ($height - $textbox[5]) / 2;
// imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);
imagettftext($image, $font_size, 0, $x, $y, $text_color , $word);$images = glob("*.png");
foreach ($images as $image_to_delete) {
@unlink($image_to_delete);
}
imagepng($image, "image" . $_SESSION['count'] . ".png");

header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

}

security_image();?>

Я понятия не имею, что я делаю неправильно. Я потратил более 10 часов на эту проблему «отображения текста». Я не понимаю, и я отчаянно нуждаюсь в помощи. Я даже скачал рабочую версию капчи с других ресурсов, которые ломаются, когда я загружаю ее на свой сервер. Я понятия не имею, что происходит. Сначала я подумал, что с моим сервером что-то не так, но тот факт, что я могу даже создать пиксели и линии, означает, что он по крайней мере работает.

Пожалуйста помоги!!!! 

ОБНОВИТЬ———————————————
Спасибо вам за ваши предложения. Вот отредактированный код. У меня все та же проблема.

<?PHP

session_start();function security_image(){
global $image;

// $code = isset($_SESSION['captcha']) ? $_SESSION['captcha'] : generate_code();

$font = 'content/fonts/comic.ttf';

$width = '110';
$height = '20';
$font_size = $height * 0.75;

$image = imagecreatetruecolor($width, $height) or die("Cannot Initialize new GD image stream");

$background_color = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,200,50,$background_color);$line_color = imagecolorallocate($image, 64,64,64);
for($i=0;$i<10;$i++) {
imageline($image,0,rand()%50,200,rand()%50,$line_color);
}

$pixel_color = imagecolorallocate($image, 0,0,255);
for($i=0;$i<1000;$i++) {
imagesetpixel($image,rand()%200,rand()%50,$pixel_color);
}

$letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$len = strlen($letters);
$letter = $letters[rand(0, $len - 1)];
$text_color = imagecolorallocate($image, 0, 0, 0);
$word = "";
for ($i = 0; $i < 6; $i++) {
$letter = $letters[rand(0, $len - 1)];
imagestring($image, 7, 5 + ($i * 30), 20, $letter, $text_color);
$word .= $letter;
}
$_SESSION['captcha_string'] = $word;

/*texbox unitinitialized (removed for the sake of just showing the word size doesnt matter)
$x = ($width - $textbox[4]) / 2;
$y = ($height - $textbox[5]) / 2;
*/

$x = ($width) / 2;
$y = ($height) / 2;
imagettftext($image,$font, 4, $x, $y, $word);header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

}
security_image();?>

я сделал некоторые предлагаемые изменения, но код, кажется, все еще делает то же самое. Просто отобразите строки и пиксели, как и ожидалось, но текст все еще отсутствует …?

2

Решение

В ваших функциях есть несколько «ошибок», давайте исправим их:

В generateRandomString ()

  • generateRandomString($length = 10)

$lenght не используется его сфера применения.

  • $text_color = imagecolorallocate($image, 0, 0, 0);

$image неинициализирован


В security_image () функция:

  • $textbox неинициализирован

  • $text_color а также $word неинициализирован.

  • А также Wrong parameter count for imagettftext() Вы добавляете 7 параметров и забываете font file параметр.

1

Другие решения

нашел проблему. используя это:
http://php.net/manual/en/function.imagettftext.php

я смог увидеть, что расположение шрифта было неверным. Использование примера на этой странице и редактирование его в соответствии с моими потребностями сработало.

0