if ($angle1>M_PI) { imageline($id,$img_center_x+$a*cos($angle1)/2,$img_center_y-$b*sin($angle1)/2,$img_center_x+$a*cos($angle1)/2,$img_center_y-$b*sin($angle1)/2+$distance,$black); if ($angle2>=M_PI) imagefill($id,$img_center_x+$a*cos(($angle1+$angle2)/2)/2,$img_center_y-$b*sin(($angle1+$angle2)/2)/2+$distance/2,$color[$i]); else imagefill($id,$img_center_x+$a*cos(($angle1+M_PI)/2)/2,$img_center_y-$b*sin(($angle1+M_PI)/2)/2+$distance/2,$color[$i]);
我的用行后,出现 Warning: Cannot add header information - headers already sent by (output started at E:\apache\htdocs\pic.php:1) in E:\apache\htdocs\pic.php on line 2Fatal error: Call to undefined function: imagepng() in E:\apache\htdocs\pic.php on line 206 把前面的header(....)注释后 显示 Fatal error: Call to undefined function: imagepng() in E:\apache\htdocs\pic.php on line 206 我观察到 imagepeng()没有定义,不知道你们的是不是这样,怎样解决?
Header( "Content-Type:image/gif");
/////////////////////////////////////////////////////////////////////////////////////////
//
// 程序名: Pollbiscuit
//
// 描 述: 这是一个很小的画贺饼图的程序
//
// 数 组: $Biscuit_val 包含了 Biscuit_values 的百分比。
// 数 组: $Biscuit_content 涉及了真正问题的答案。
// 测 试:
// test_biscuit.php3:
// <html><body>
// <h1>Poll result!</h1>
// $Biscuit_val[]=99.96;$Biscuit_content[]="I donn't know!";
// $Biscuit_val[]=0.01; $Biscuit_content[]="I think so";
// $Biscuit_val[]=0.01; $Biscuit_content[]="NO,just a joke";
// $Biscuit_val[]=0.01; $Biscuit_content[]="Like it";
// <Img src=PollBiscuit.php3?<script language="php"> for($i=0;$i<count($Biscuit_val);$i++) echo "Biscuit_val[$i]=$Biscuit_val[$i]"."&"."content[$i]=\
// ".urlencode($Biscuit_content[$i])."&"; </script> border=0 >
// </body></html>
$num=count($Biscuit_val); //////////////////////// 作图区定义 /////////////////////////////////////////
$img_w=300; //图片的宽
$img_h=130; //图片的高
$bottom=10; //矩形的下坐标
$left=120; //矩形的左坐标
$a=100; //椭圆的长轴
$b=50; //椭圆的短轴
$distance=10; //矩形间的距离
$id=ImageCreate($img_w,$img_h); //创建画图区(画布)///////////////////////// 颜色定义 ///////////////////////////////////////// $black=ImageColorAllocate($id,0,0,0);
$white=ImageColorAllocate($id,255,255,255);
$color[]=ImageColorAllocate($id,0,255,0);
$color[]=ImageColorAllocate($id,255,0,0);
$color[]=ImageColorAllocate($id,0,0,255);
$color[]=ImageColorAllocate($id,255,255,0);
$color[]=Imagecolorallocate($id,0,255,255);
$color[]=Imagecolorallocate($id,255,0,255);
$color[]=Imagecolorallocate($id,125,125,125);
$color[]=Imagecolorallocate($id,0,0,125);
$color[]=Imagecolorallocate($id,125,0,0);
$color[]=Imagecolorallocate($id,0,0,125);
$color[]=Imagecolorallocate($id,125,125,0);
$color[]=Imagecolorallocate($id,0,125,125);
$red=$color[1];
$green=$color[0];
$blue=$color[2];
$yellow=$color[3];
$trans=ImageColorTransparent($id,$white); //透明的颜色定义
ImageFill($id,0,0,$white); //填充透明的颜色
$img_center_x=50; //X坐标轴在图作图区的中央坐标
$img_center_y=$img_h/2; //Y坐标轴在图作图区的中央坐标////////////////////////// 画椭圆 //////////////////////////
ImageArc($id,$img_center_x,$img_center_y,$a,$b,0,360,$black);
ImageArc($id,$img_center_x,$img_center_y+$distance,$a,$b,0,180,$black);
imageline($id,$img_center_x,$img_center_y,$img_center_x+$a/2,$img_center_y,$black); ///////////////////////// 画线 //////////////////////// Imageline($id,$img_center_x+$a/2,$img_center_y,$img_center_x+$a/2,$img_center_y+$distance,$black);
Imageline($id,$img_center_x-$a/2,$img_center_y,$img_center_x-$a/2,$img_center_y+$distance,$black); //////////////////////// 画圆饼 ////////////////////////////
$angle1=$angle2=0; //角度angles
for ($i=0;$i<$num;$i++)
{
$angle2=$angle1;
$angle1+=$Biscuit_val[$i]*M_PI*2/100; //计算角度
if ($i!=$num-1)
imageline($id,$img_center_x,$img_center_y,$img_center_x+$a*cos($angle1)/2,$img_center_y-$b*sin($angle1)/2,$black);
imagefill($id,$img_center_x+$a*cos(($angle1+$angle2)/2)/4,$img_center_y-$b*sin(($angle1+$angle2)/2)/4,$color[$i]);
if ($angle1>M_PI)
{
imageline($id,$img_center_x+$a*cos($angle1)/2,$img_center_y-$b*sin($angle1)/2,$img_center_x+$a*cos($angle1)/2,$img_center_y-$b*sin($angle1)/2+$distance,$black);
if ($angle2>=M_PI)
imagefill($id,$img_center_x+$a*cos(($angle1+$angle2)/2)/2,$img_center_y-$b*sin(($angle1+$angle2)/2)/2+$distance/2,$color[$i]);
else
imagefill($id,$img_center_x+$a*cos(($angle1+M_PI)/2)/2,$img_center_y-$b*sin(($angle1+M_PI)/2)/2+$distance/2,$color[$i]);
}
imagefilledrectangle($id,$left,$bottom-5,$left+10,$bottom,$color[$i]);
$string=sprintf( "%.2f",$Biscuit_val[$i]);
$string.= "%". " (".stripslashes($Biscuit_content[$i]). ")";
imagestring($id,2,$left,$bottom-2,$string,$black);
$bottom+=20;
} ImageGif($id);
Imagedestroy($id);
<?
/*
函数说明
$data:y轴数据(数组)
$graphdata:y轴数据--百分比(数组)
$label:x轴数据(数组)
$height:图像高度
$width:图像宽度
$font:字号
$dot:决定点的大小
$bg:背景色
$line :线色
$text :文本色
$dotcolor:点色
$file:输出图像文件名
*/ function qximage($data ,
$graphdata,
$label ,
$height,
$width ,
$font,
$dot,
$bg,
$line,
$text,
$dotcolor,
$file)
{
$jc=$height/100;
$fontwidth= imagefontwidth ($font);
$fontheight=imagefontheight($font); $image= imagecreate ($width,$height+20);
$bg= imagecolorallocate($image ,$bg[0],$bg[1],$bg[2]);
$line=imagecolorallocate($image ,$line[0],$line[1],$line[2]);
$text=imagecolorallocate($image ,$text[0],$text[1],$text[2]);
$dotcolor=imagecolorallocate($image ,$dotcolor[0],$dotcolor[1],$$dotcolor[2]);
imageline ($image,0,0,0,$height,$line);
imageline($image,0,$height,$width,$height,$line);
for ($i=1;$i<11;$i++)
{
imagedashedline($image,0,$height - $jc*$i*10 ,$width ,$height -$jc*$i*10 ,$line );
imagestring ($image,$font,0,$height-$jc*$i*10,$i*10,$text);
}
for ($i=0;$i<count($data);$i++)
{
#echo $tmp."<BR>";
$x1=(($width-50)/count($data))*($i)+40;
#echo $x1 ."<BR>";
$y1=$height-$graphdata[$i]*$jc;
$x2=$x1;
$y2=$y1+$graphdata[$i]*$jc;
#echo $y1."<BR>";
imagestring($image,$font,$x1,$y1-2*$fontheight,$graphdata[$i]."%(".$data[$i].")",$text);
imagearc ($image,$x1 ,$y1,$dot,$dot,0,360,$dotcolor);
imagefilltoborder ($image,$x1,$y1,$dotcolor,$dotcolor);
imagestring ($image,$font,$x1,$y2,$label[$i],$text);
if ($i>0)
{
imageline($image,$tmpx1,$tmpy1,$x1,$y1,$line);
}
$tmpx1=$x1;$tmpy1=$y1;
}
imagegif ($image,$file);
}
?>
/**************************************
编写函数:xsmart
书写函数时间:7.9,2002
效果图:http://xsmart.yeah.net/函数功能:
1、生成颜色区分比例饼图;
1、提供无限量数据处理能力;
2、可以完全由用户定制饼图各种属性;函数支持:
1、需要gd库;函数缺点:
1、必须同使用文件放在一起,不能单独写成文件进行调用;
2、若需要另一文件调用图片,可先生成图片,然后应用;
函数使用实例如函数后面例子**************************************/
header("Content-type: image/png");
/*
把角度转换为弧度
*/
function radians ($degrees)
{
return($degrees * (pi()/180.0));
}
/*
** 取得在圆心为(0,0)圆上 x,y点的值
*/
function circle_point($degrees, $diameter)
{
$x = cos(radians($degrees)) * ($diameter/2);
$y = sin(radians($degrees)) * ($diameter/2); return (array($x, $y));
} /*******
主函数部分
*******/
function biscuit($ChartDiameter,$ChartFont,$ChartData,$ChartLabel,$ChartDiameterWidth,$colorSliceSwitch,$colorBodySlice,$colorBorderSlice,$colorTextSlice)
{
//确定图形的大小 $ChartFontHeight = imagefontheight($ChartFont);//图表字体的大小
$ChartWidth = $ChartDiameter + 20;
$ChartHeight = $ChartDiameter + 20 +
(($ChartFontHeight + 2) * count($ChartData)); //确定统计的总数
for($index = 0; $index < count($ChartData); $index++)
{
$ChartTotal += $ChartData[$index];
} $ChartCenterX = $ChartDiameter/2 + 10;
$ChartCenterY = $ChartDiameter/2 + 10;
//生成空白图形
$image = imagecreate($ChartWidth, $ChartHeight); //分配颜色
$color=split("-",$colorBodySlice);
$colorBody = ImageColorAllocate($image, intval($color[0]), intval($color[1]), intval($color[2]));
$color=split("-",$colorBorderSlice);
$colorBorder = ImageColorAllocate($image, intval($color[0]), intval($color[1]), intval($color[2]));
$color=split("-",$colorTextSlice);
$colorText = ImageColorAllocate($image, intval($color[0]), intval($color[1]), intval($color[2]));for($index = 0; $index < count($ChartData); $index++)
{
$color=split("-",$colorSliceSwitch[$index]);
$colorSlice[$index] = ImageColorAllocate($image, intval($color[0]), intval($color[1]), intval($color[2]));
}//填充背境
imagefill($image, 0, 0, $colorBody);
/*
** 画每一个扇形
*/
$Degrees = 0;
for($index = 0; $index < count($ChartData); $index++)
{
$StartDegrees = round($Degrees);
$Degrees += (($ChartData[$index]/$ChartTotal)*360);
$EndDegrees = round($Degrees); $CurrentColor = $colorSlice[$index%(count($colorSlice))]; //画图F
imagearc($image,$ChartCenterX,$ChartCenterY,$ChartDiameter,
$ChartDiameter,$StartDegrees,$EndDegrees, $CurrentColor); //画直线
list($ArcX, $ArcY) = circle_point($StartDegrees, $ChartDiameter);
imageline($image,$ChartCenterX,$ChartCenterY,floor($ChartCenterX + $ArcX),
floor($ChartCenterY + $ArcY),$CurrentColor);
//画直线
list($ArcX, $ArcY) = circle_point($EndDegrees, $ChartDiameter);
imageline($image,$ChartCenterX,$ChartCenterY,ceil($ChartCenterX + $ArcX),
ceil($ChartCenterY + $ArcY),$CurrentColor); //填充扇形
$MidPoint = round((($EndDegrees - $StartDegrees)/2) + $StartDegrees);
list($ArcX, $ArcY) = circle_point($MidPoint, $ChartDiameter/2);
imagefilltoborder($image,floor($ChartCenterX + $ArcX),floor($ChartCenterY + $ArcY),
$CurrentColor,$CurrentColor);
} //画边框
imagearc($image,
$ChartCenterX,
$ChartCenterY,
$ChartDiameter,
$ChartDiameter,
0,
180,
$colorBorder); imagearc($image,
$ChartCenterX,
$ChartCenterY,
$ChartDiameter,
$ChartDiameter,
180,
360,
$colorBorder); $oChartDiameter = $ChartDiameter+$ChartDiameterWidth;
imagearc($image,
$ChartCenterX,
$ChartCenterY,
$oChartDiameter,
$oChartDiameter,
0,
180,
$colorBorder); imagearc($image,
$ChartCenterX,
$ChartCenterY,
$oChartDiameter,
$oChartDiameter,
180,
360,
$colorBorder); if($ChartDiameterWidth<=1)
imagefilltoborder($image,
floor($ChartCenterX + $ChartDiameter/2),
$ChartCenterY,
$colorBorder,
$colorBorder);
else
imagefilltoborder($image,
floor($ChartCenterX + $ChartDiameter/2+1),
$ChartCenterY,
$colorBorder,
$colorBorder);
//画图例
for($index = 0; $index < count($ChartData); $index++)
{
$CurrentColor = $colorSlice[$index%(count($colorSlice))];
$LineY = $ChartDiameter + 20 + ($index*($ChartFontHeight+2)); //draw color box
imagerectangle($image,
10,
$LineY,
10 + $ChartFontHeight,
$LineY+$ChartFontHeight,
$colorBorder); imagefilltoborder($image,
12,
$LineY + 2,
$colorBorder,
$CurrentColor); //画标签
imagestring($image,
$ChartFont,
20 + $ChartFontHeight,
$LineY,
"$ChartLabel[$index]: $ChartData[$index]",
$colorText);
}
return $image;
}
/******
函数完成
******/
/*****************************************************
函数使用实例
*****************************************************/
// 填充图表的参数
$ChartDiameter = 200; //图表直径
$ChartFont = 2; //图表字体
$ChartData = array( "15","20","12");//用于生成图表的数据,可通过数据库来取得来确定
$ChartLabel = array("red", "green","blue"); //数据对应的名称,请用英文
$ChartDiameterWidth=10;//圆边线宽度
/*****************************
颜色配置格式如下:
红(0-255)- 绿(0-255)- 蓝(0-255)
*****************************/
$colorBodySlice="255-255-1";//图片背景色
$colorBorderSlice="255-25-125";//圆饼的边缘颜色
$colorTextSlice="0-0-0";//文字颜色
$colorSliceSwitch = Array("255-0-0","0-255-0","0-0-255");//各数据块的颜色:红(0-255)-绿(0-255)-蓝(0-255)//输出生成的图片
imagepng(biscuit($ChartDiameter,$ChartFont,$ChartData,$ChartLabel,$ChartDiameterWidth,$colorSliceSwitch,$colorBodySlice,$colorBorderSlice,$colorTextSlice));
?>
Warning: Cannot add header information - headers already sent by (output started at E:\apache\htdocs\pic.php:1) in E:\apache\htdocs\pic.php on line 2Fatal error: Call to undefined function: imagepng() in E:\apache\htdocs\pic.php on line 206
把前面的header(....)注释后
显示
Fatal error: Call to undefined function: imagepng() in E:\apache\htdocs\pic.php on line 206
我观察到
imagepeng()没有定义,不知道你们的是不是这样,怎样解决?