Php 生成验证码图像
我想使用PHP imagettftext生成验证码图像。下面是我的代码。它给出了一个空的图像。我想解决这个问题 我已经测试了代码,但无法找到为什么图像没有显示,尽管我的随机文本正在传递给captcha图像生成功能Php 生成验证码图像,php,image,text,captcha,imagettftext,Php,Image,Text,Captcha,Imagettftext,我想使用PHP imagettftext生成验证码图像。下面是我的代码。它给出了一个空的图像。我想解决这个问题 我已经测试了代码,但无法找到为什么图像没有显示,尽管我的随机文本正在传递给captcha图像生成功能 <?php function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX
<?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$文本代码>和
回显“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文件的同一文件夹中。尼斯验证码图像生成器:
class captcha{
public static function create(){
$image = imagecreatetruecolor(160, 40);
imagefilledrectangle($image, 0, 0, 160, 40, imagecolorallocate($image, 244, 245, 245));
$code="";
for($i=0;$i<6;$i++){
$color = imagecolorallocate($image, rand(160,230), rand(160,240), rand(160,250));
imageline($image, rand(10,140), rand(2,35), rand(10,140), rand(5,35), $color) ;
}
for($i=1;$i<6;$i++){
$color = imagecolorallocate($image, rand(50,150), rand(50,140), rand(50,150));
$char = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$num = $char[rand(0, strlen($char)-1)];
$code .= $num;
//use a proper font file like verdana.ttf and change the font name at bellow
imagefttext($image, rand(14, 18), rand(-10,40), $i*25, rand(24,34), $color, __DIR__."/verdana.ttf", $num);
}
imagejpeg($image,"cap.jpg");
}
}
captcha::create();
echo "<img src=\"cap.jpg\">";
类验证码{
公共静态函数create(){
$image=imagecreatetruecolor(160,40);
imagefilledrectangle($image,0,0,160,40,imagecolorallocate($image,244245245));
$code=“”;
对于($i=0;$i错误日志中的任何内容?$white
和$black
未定义。请删除echo$text;
和echo'OK';
。这是kesha.ttf吗?
在您的服务器上,并且与此目录相同?非常感谢您丢失了$white和$black!!!!