imagejpeg()输出图片失败的原因与解决方法
用imagejpeg()画不出图片,不是乱码就是红叉.
1.输出结果: 乱码
代码
<html>
<head>
</head>
<body>
<?php
header("content-type: image/jpeg"); //设置http头部的类型
for($i=0;$i<4;$i++)
{
$rand.=dechex(rand(1,15)); //生成随机数
}
$image = imagecreatetruecolor(100,30); //生成图片
$color = imagecolorallocate($image, 255,255,255);
imagestring($image,6,rand(0,65),rand(0,15),$rand,$color); //把随机数画进图片
imagejpeg($image);
?>
</body>
</html>
<head>
</head>
<body>
<?php
header("content-type: image/jpeg"); //设置http头部的类型
for($i=0;$i<4;$i++)
{
$rand.=dechex(rand(1,15)); //生成随机数
}
$image = imagecreatetruecolor(100,30); //生成图片
$color = imagecolorallocate($image, 255,255,255);
imagestring($image,6,rand(0,65),rand(0,15),$rand,$color); //把随机数画进图片
imagejpeg($image);
?>
</body>
</html>
原因: http头部的content-type已经被设置为image/jpeg,所以不支持html代码了.
解决方法: 把html的代码去掉.
2.输出结果: 红叉
代码
<?php
header("content-type: image/jpeg");
for($i=0;$i<4;$i++)
{
$rand.=dechex(rand(1,15)); //生成随机数
}
$image = imagecreatetruecolor(100,30); //生成图片
$color = imagecolorallocate($image, 255,255,255);
imagestring($image,6,rand(0,65),rand(0,15),$rand,$color); //把随机数画进图片
imagejpeg($image);
?>
<?php
header("content-type: image/jpeg");
for($i=0;$i<4;$i++)
{
$rand.=dechex(rand(1,15)); //生成随机数
}
$image = imagecreatetruecolor(100,30); //生成图片
$color = imagecolorallocate($image, 255,255,255);
imagestring($image,6,rand(0,65),rand(0,15),$rand,$color); //把随机数画进图片
imagejpeg($image);
?>
原因: "<?php"前面不能有字符,这里"<?php"上面有一行空行('\n')
解决方法: 去掉"<?php"上面的空行.
注意: "<?php"前面是不能有字符,所以即使不是空行而是空格,也会出红叉.
3.输出结果: 红叉
代码
<?php
header("content-type: image/jpeg");
for($i=0;$i<4;$i++)
{
$rand.=dechex(rand(1,15)); //生成随机数
}
$image = imagecreatetruecolor(100,30); //生成图片
$color = imagecolorallocate($image, 255,255,255);
imagestring($image,6,rand(0,65),rand(0,15),$rand,$color); //把随机数画进图片
imagejpeg($image);
?>
header("content-type: image/jpeg");
for($i=0;$i<4;$i++)
{
$rand.=dechex(rand(1,15)); //生成随机数
}
$image = imagecreatetruecolor(100,30); //生成图片
$color = imagecolorallocate($image, 255,255,255);
imagestring($image,6,rand(0,65),rand(0,15),$rand,$color); //把随机数画进图片
imagejpeg($image);
?>
原因: 被Notice消息扰乱了,这里$rand没有被预先定义就使用,虽然PHP允许,但会出Notice消息提示.
本来Notice消息应该是输出到页面的,但是这里content-type被设置为image/jpeg,所以显示不出来.
样例: 运行以下代码会得到"Notice: Undefined variable: rand in E:\Website\test.php on line 3"
<?php
for($i=0;$i<4;$i++)
$rand.=dechex(rand(1,15));
echo($rand);
?>
for($i=0;$i<4;$i++)
$rand.=dechex(rand(1,15));
echo($rand);
?>
解决方法: 在开头加一句"error_reporting(E_ALL ^ E_NOTICE);"(取消Notice提示)或者"$rand=NULL;"(预先定义变量)
4.最后得到运行通过的代码:
代码
<?php
header("content-type: image/jpeg");
//error_reporting(E_ALL ^ E_NOTICE); //取消Notice消息提示
$rand=null; //预先定义了$rand变量就不会被Notice提示了
for($i=0;$i<4;$i++)
{
$rand.=dechex(rand(1,15)); //生成随机数
}
$image = imagecreatetruecolor(100,30); //生成图片
$color = imagecolorallocate($image, 255,255,255);
imagestring($image,6,rand(0,65),rand(0,15),$rand,$color); //把随机数画进图片
imagejpeg($image);
?>
header("content-type: image/jpeg");
//error_reporting(E_ALL ^ E_NOTICE); //取消Notice消息提示
$rand=null; //预先定义了$rand变量就不会被Notice提示了
for($i=0;$i<4;$i++)
{
$rand.=dechex(rand(1,15)); //生成随机数
}
$image = imagecreatetruecolor(100,30); //生成图片
$color = imagecolorallocate($image, 255,255,255);
imagestring($image,6,rand(0,65),rand(0,15),$rand,$color); //把随机数画进图片
imagejpeg($image);
?>