Я хочу создать Captcha Image с помощью PHP imagettftext. И следующий мой код. Он дает пустое изображение. Я хочу решить эту проблему.
Я проверил код, но не смог найти, почему изображение не отображается, хотя мой случайный текст передается функции генерации изображения captcha.
<?php function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } function generateCaptchaImage($text = 'good'){ echo $text; echo 'OK'; // Set the content-type header('Content-Type: image/png'); $width = 200; $height = 30; $font = 'ThisisKeSha.ttf'; // Create the image $im = imagecreatetruecolor($width, $height); //ADD NOISE - DRAW background squares $square_count = 6; for ($i = 0; $i < 10; $i++) { $cx = (int)rand(0, $width/2); $cy = (int)rand(0, $height); $h = $cy + (int)rand(0, $height/5); $w = $cx + (int)rand($width/3, $width); imagefilledrectangle($im, $cx, $cy, $w, $h, $white); } //ADD NOISE - DRAW ELLIPSES $ellipse_count = 5; for ($i = 0; $i < $ellipse_count; $i++) { $cx = (int)rand(-1*($width/2), $width + ($width/2)); $cy = (int)rand(-1*($height/2), $height + ($height/2)); $h = (int)rand($height/2, 2*$height); $w = (int)rand($width/2, 2*$width); imageellipse($im, $cx, $cy, $w, $h, $grey); } // Add the text imagettftext($im, 20, 0, 10, 20, $black, $font, $text); imagepng($im); } $randomString = generateRandomString(); generateCaptchaImage($randomString); ?>
Исправлено из комментариев
$white
и $black
не определены. echo $text;
и echo 'OK';
, ThisisKeSha.ttf
на вашем сервере и в том же каталоге, что и этот? $white
и $black
не определены.
Попробуйте этот код;
<?php function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } function generateCaptchaImage($text = 'good'){ // Set the content-type header('Content-Type: image/png'); $width = 200; $height = 30; // Create the image $im = imagecreatetruecolor($width, $height); // Create some colors $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallocate($im, 128, 128, 128); $black = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 399, 29, $white); //ADD NOISE - DRAW background squares $square_count = 6; for($i = 0; $i < $square_count; $i++){ $cx = rand(0,$width); $cy = (int)rand(0, $width/2); $h = $cy + (int)rand(0, $height/5); $w = $cx + (int)rand($width/3, $width); imagefilledrectangle($im, $cx, $cy, $w, $h, $white); } //ADD NOISE - DRAW ELLIPSES $ellipse_count = 5; for ($i = 0; $i < $ellipse_count; $i++) { $cx = (int)rand(-1*($width/2), $width + ($width/2)); $cy = (int)rand(-1*($height/2), $height + ($height/2)); $h = (int)rand($height/2, 2*$height); $w = (int)rand($width/2, 2*$width); imageellipse($im, $cx, $cy, $w, $h, $grey); } // Replace path by your own font path $font = 'ThisisKeSha.ttf'; // Add some shadow to the text imagettftext($im, 20, 0, 11, 21, $grey, $font, $text); // Add the text imagettftext($im, 20, 0, 10, 20, $black, $font, $text); // Using imagepng() results in clearer text compared with imagejpeg() imagepng($im); imagedestroy($im); } $randomString = generateRandomString(); generateCaptchaImage($randomString); ?>
Вы не создали цвета $white
, $black
и $grey
. Также шрифт должен находиться в той же папке этого файла php.
Это простой способ создать канадца в PHP, вы можете попробовать это,
<?php @session_start(); header("Content-type: image/png"); $_SESSION["captcha"] = substr(md5(time()),0,5); $im = imagecreate(110, 30); $white = imagecolorallocate($im, 244, 255, 255); $red = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); $size = $_SESSION["captcha"]; $text = "$size"; $font = 'comic.TTF'; imagettftext($im, 20, 0, 25, 20, $red, $font, $text); imagettftext($im, 20, 0, 25, 20, $black, $font, $text); imagepng($im); imagedestroy($im); ?>
php сеанс, используемый для этого. Подробнее о Captcha в PHP