imagejpeg()输出图片失败的原因与解决方法

  • Post author:
  • Post category:其他

用imagejpeg()画不出图片,不是乱码就是红叉.

 

1.输出结果: 乱码


ExpandedBlockStart.gif
代码

<
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.输出结果: 红叉


ExpandedBlockStart.gif
代码



<?
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.输出结果: 红叉


ExpandedBlockStart.gif
代码

<?
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
);

?>

原因: 被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
);

?>

解决方法: 在开头加一句”error_reporting(E_ALL ^ E_NOTICE);”(取消Notice提示)或者”$rand=NULL;”(预先定义变量)

 

4.最后得到运行通过的代码:


ExpandedBlockStart.gif
代码

<?
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
);

?>

 

转载于:https://www.cnblogs.com/live41/archive/2010/07/02/1769754.html