請各位幫我看看怎么回事,圖片顯示是破裂的
<?php?
require_once 'string.func.php';
//通過GD庫做驗證碼
//創建畫布
session_start();
$width=80;
$height=28;
// 新建一個真彩色圖像?
$image=imagecreatetruecolor($width,$height);
//為一幅圖像分配顏色?
$white=imagecolorallocate($image,255,255, 255);
//為一幅圖像分配顏色?
$black=imagecolorallocate($image, 0, 0,0);
//畫一矩形并填充?
imagefilledrectangle($image, 1, 1, $width-2, $height-2, $black);
$type=1;
$length=4;
$chars=buildRandomString($type,$length);
$sess_name="verify";
$_SESSION[$sess_name]=$chars;
$fontfiles=array('MSYH.TTF');
for($i=0;$i<$length;$i++){
$size=mt_rand(14,18);
$angle=mt_rand(-15,15);
$x=5+$i*$size;
$y=mt_rand(20,26);
$fontfile="../fonts".$fontfiles[mt_rand(0,count($fontfiles)-1)];
$text=substr($chars,$i,1);
// 用 TrueType 字體向圖像寫入文本?
? ? imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
}
header("content-type:image/gif");
imagegif($image);
imagedestroy($image);
<?php?
function buildRandomString($type=1,$length=4){
if($type==1){
? ? $chars=join("",range(0,9));
}
elseif($type==2){
? ? $chars=join("",array_merge(range("a","z"),range("A","Z")));
}
elseif($type==3){
? ? $chars=join("",array_merge(range("a","z"),range("A","Z"),range(0,9)));
}
if($length>strlen($chars)){
? ? exit("字符串長度不夠");
}
$chars=str_shuffle($chars);
return substr($chars,0,$length);
}
2016-11-16
我幫你改好了,運行沒問題。
你的問題是:
imagettftext()方法第7個參數$color,是未知的,他需要一個顏色來設置字體顏色,所以在這個這個方法之前先用$color =?imagecolorallocate();生成一個顏色。
你把這句$fontfile="../fonts".$fontfiles[mt_rand(0,count($fontfiles)-1)];放在循環里面,不建議這么做,雖然沒問題,但如果代碼運算龐大的話會耗費更多資源,建議放到for外面去。這倒不是嚴重問題,組要是下面。
你的這句:$fontfile="../fonts".$fontfiles[mt_rand(0,count($fontfiles)-1)];中“../fonts”之后沒有加上目錄字符“/”,這樣字符拼接起來的時候會是這樣的"../fontsMSYH.TTF",應該修改成這樣:$fontfile="../fonts/".$fontfiles[mt_rand(0,count($fontfiles)-1)];?
然后拼接后的字符是這樣才是正確的"../fonts/MSYH.TTF"。下面是改好的代碼: