0

我创建了一个简单的验证码生成器,但不会显示验证码图像:

索引.php:

<?php
session_start();
$_SESSION['captcha'] = rand(1000, 9999);
?>

<img src="generator.inc.php" />

生成器.inc.php:

<?php
session_start();
header('Content-type: image/jpeg');

$text = $_SESSION['captcha'];

$font_size = 30;
$image_width = 160;
$image_height = 50;

$image = imagecreate($image_width, $image_height);

imagecolorallocate($image, 200, 200, 200);

$font_color = imagecolorallocate($image, 20 , 20 , 20);

imagettftext($image, $font_size, 0, 15, 30, $font_color, 'BYekan.ttf', $text);

imagejpeg($image);
?>

请告诉我我做错了什么?

PS:

我在 Linux 上使用 Lamp 服务器。

4

3 回答 3

1

可能没有安装GD库。

还要检查php.ini并确保取消注释 GD 行。

于 2014-07-25T14:40:22.767 回答
0

我删除了header你脚本中的函数调用,发现你没有定义$image_height变量的错误。在您的脚本中,您复制了$image_width分配。

于 2013-08-04T11:25:51.573 回答
0

我的建议是尝试两件事:

我之前已经阅读并看到人们建议将内容类型header('Content-type: image/jpeg');放在imagejpeg($image);. 为了支持这一点,这里有一篇描述它的文章:http: //php.net/manual/en/function.imagejpeg.php

我的另一个建议是对文件进行 base64_encode。如果header('Content-type: image/jpeg');产生错误建议“必须在发送任何实际输出之前调用 header() ”,则 base64_encode 允许创建具有指定内容类型的图像。删除头代码,然后在imagejpeg($image);调用时添加以下代码。

ob_start();
imagejpeg($image); //your code
$img = ob_get_contents();
ob_end_clean();
echo '<img src="data:image/jpeg;base64,'.base64_encode($img).'" />';
于 2013-08-04T11:37:11.353 回答