用好PHP的图形函数,网上有很多介绍的

解决方案 »

  1.   

    用GD库的函数,不过自己写比较麻烦,去ZEND。COM或其它一些网站找现成的类研究一下吧。
      

  2.   


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

  3.   

    php作线形图的函数 
    <? 
    /* 
    函数说明 
    $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); 

    ?>  
      

  4.   

    这里的gif改成jpeg或png就可以了
      

  5.   

    <?php 
    /**************************************
    编写函数: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)); 
    ?>
      

  6.   

    我的用行后,出现
    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()没有定义,不知道你们的是不是这样,怎样解决?