<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一江春水向東流

    做一個有思想的人,期待與每一位熱愛思考的人交流,您的關注是對我最大的支持。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks
    // 圖形類->gd.class.php
    <? php

    class ?GD{
    ?
    /* ?
    函數說明?
    $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 ?{?
    ?
    # echo?$tmp."?";?
    ? $x1 = (( $width - 50 ) / count ( $data )) * ( $i ) + 40 ;?
    ?
    # echo?$x1?."?";?
    ? $y1 = $height - $graphdata [ $i ] * $jc ;?
    ?
    $x2 = $x1 ;?
    ?
    $y2 = $y1 + $graphdata [ $i ] * $jc ;?
    ?
    # echo?$y1."?";?
    ?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 );?
    }?
    // 為了方便起見,我又做了一個函數來制作柱型圖
    /*
    參數說明:
    $graphdata:百分比數據(y軸)
    $label:x軸標題
    $data:實際數據(y軸)
    $graphwidth:圖像寬度
    $graphheight:圖像高度
    $graphscale:高度因子(為$graphheight/100)
    $graphfont:字體號
    $bg;背景顏色值
    $text:文本顏色值
    $grid:邊線顏色值
    $bar:柱的顏色值
    $bz:備注(不支持中文呀)
    */
    ?
    function ?timage(
    ?
    $graphdata , $label , $data ,
    ?
    $graphwidth , $graphheight , $graphscale , $graphfont ,
    ?
    $bg , $text , $grid , $bar , $bz )
    ?{

    ?
    header ( " Content-type:image/gif " );
    ?
    $image = imagecreate( $graphwidth + 50 , $graphheight + 50 );
    ?
    $bgcolor = ?imagecolorallocate?( $image ? , $bg [ 0 ] , $bg [ 1 ] , $bg [ 2 ]);
    ?
    $textcolor = ?imagecolorallocate?( $image ? , $text [ 0 ] , $text [ 1 ] , $text [ 2 ]);
    ?
    $gridcolor = imagecolorallocate?( $image ? , $grid [ 0 ] , $grid [ 1 ] , $grid [ 2 ]);
    ?
    $barcolor = imagecolorallocate?( $image ? , $bar [ 0 ] , $bar [ 1 ] , $bar [ 2 ]);
    ?
    $gridabelwidth = imagefontwidth( $graphfont ) * 3 + 1 ;
    ?
    $gridableheight = ?imagefontheight?( $graphfont );
    ?imageline(
    $image , $gridlabelwidth , 0 , $gridlabelwidth , $graphheight -

    1 , $gridcolor );
    ?imageline(
    $image , 0 , $graphheight - 1 , $graphwidth - 1 , $graphheight - 1 , $gridcolor );
    ?
    for ( $i = 0 ; $i < $graphheight ; $i += $graphheight / 10 )
    ?{
    ??imagedashedline?(
    $image , 0 , $i , $graphwidth - 1 , $i , $gridcolor );
    ??imagestring(
    $image , $graphfont , 0 , $i , round (( $graphheight - $i ) /

    $graphscale ) , $textcolor );
    ?}

    ?
    $barwidth = (( $graphwidth - $gridlabelwidth ) / count ( $graphdata )) -

    30 ; # &iquest;&Oslash;&Ouml;&AElig;&Ouml;ù&micro;&Auml;×

    & Uuml; & iquest;í & para; & Egrave;
    ?
    for ( $i = 0 ; $i ?{
    ??
    $bartopx = $gridlabelwidth + (( $i + 1 ) * 20 ) +

    (
    $i * $barwidth ); # &iquest;&Oslash;&Ouml;&AElig;&Ouml;ù&iquest;&iquest;×

    ó
    & micro; & Auml; & frac34;à & Agrave; & euml;
    ??
    $barbottomx = $bartopx + $barwidth ;?? $barbottomy = $graphheight -

    1 ; # &iquest;&Oslash;&Ouml;&AElig;&Ouml;ù&micro;&Auml;&Iuml;&Acirc;±

    & szlig; & frac12; & ccedil;
    ??
    $bartopy = $barbottomy - ( $graphdata [ $i ] * $graphscale );
    ??imagefilledrectangle

    (
    $image , $bartopx , $bartopy , $barbottomx , $barbottomy , $barcolor );
    ??
    $labelx1 = $bartopx ;
    ??
    $labely1 = $bartopy - 15 ;
    ??
    $labelx2 = $bartopx ;
    ??
    $labely2 = $graphheight ;
    ??imagestring(
    $image , $graphfont , $labelx1 , $labely1 , " $graphdata

    [$i]
    " . " % " , $textcolor );
    ??imagestring(
    $image , $graphfont , $labelx2 , $labely2 , " $label[$i] " , $textcolor );
    ??imagestringup?(
    $image , $graphfont , $labelx1 + 10 , $labely1 -

    $gridableheight , " $data[$i] " , $textcolor );
    ?}
    ?imagestring(
    $image , $graphfont , 1 , $graphheight + 30 , $bz , $textcolor );
    ?imagegif?(
    $image );
    ?}

    // PHP數據餅圖
    ? define ( " ANGLE_STEP " , ? 5 );???? // 定義畫橢圓弧時的角度步長?

    function ?draw_getdarkcolor( $img , $clr )???? // 求$clr對應的暗色?
    {?
    ????
    $rgb ???? = ????imagecolorsforindex( $img , $clr );?
    ????
    return ? array ( $rgb [ " red " ] / 2 , $rgb [ " green " ] / 2 , $rgb [ " blue " ] / 2 );?
    }?

    function ?draw_getexy( $a , ? $b , ? $d )???? // 求角度$d對應的橢圓上的點坐標?
    {?
    ????
    $d ???????? = ???? deg2rad ( $d );?
    ????
    return ? array ( round ( $a * Cos ( $d )) , ? round ( $b * Sin ( $d )));?
    }?

    function ?draw_arc( $img , $ox , $oy , $a , $b , $sd , $ed , $clr )???? // 橢圓弧函數?
    {?
    ????
    $n ???????????????????? = ???? ceil (( $ed - $sd ) / ANGLE_STEP);?
    ????
    $d ???????????????????? = ???? $sd ;?
    ????
    list ( $x0 , $y0 )???????? = ????draw_getexy( $a , $b , $d );?
    ????
    for ( $i = 0 ;? $i < $n ;? $i ++ )?

    {?
    ????????
    $d ???????????????? = ????( $d + ANGLE_STEP) > $ed ? $ed : ( $d + ANGLE_STEP);?
    ????????
    list ( $x , ? $y )???? = ????draw_getexy( $a , ? $b , ? $d );?
    ????????imageline(
    $img , ? $x0 + $ox , ? $y0 + $oy , ? $x + $ox , ? $y + $oy , ? $clr );?
    ????????
    $x0 ???????????????? = ???? $x ;?
    ????????
    $y0 ???????????????? = ???? $y ;?
    ????}?
    }?

    function ?draw_sector( $img , ? $ox , ? $oy , ? $a , ? $b , ? $sd , ? $ed , ? $clr )???? // 畫扇面?
    {?
    ????
    $n ???????????????????? = ???? ceil (( $ed - $sd ) / ANGLE_STEP);?
    ????
    $d ???????????????????? = ???? $sd ;?
    ????
    list ( $x0 , $y0 )???????? = ????draw_getexy( $a , ? $b , ? $d );?
    ????imageline(
    $img , ? $x0 + $ox , ? $y0 + $oy , ? $ox , ? $oy , ? $clr );?
    ????
    for ( $i = 0 ;? $i < $n ;? $i ++ )?
    ????{?
    ????????
    $d ???????????????? = ????( $d + ANGLE_STEP) > $ed ? $ed : ( $d + ANGLE_STEP);?
    ????????
    list ( $x , ? $y )???? = ????draw_getexy( $a , ? $b , ? $d );?
    ????????imageline(
    $img , ? $x0 + $ox , ? $y0 + $oy , ? $x + $ox , ? $y + $oy , ? $clr );?
    ????????
    $x0 ???????????????? = ???? $x ;?
    ????????
    $y0 ???????????????? = ???? $y ;?
    ????}?
    ????imageline(
    $img , ? $x0 + $ox , ? $y0 + $oy , ? $ox , ? $oy , ? $clr );?
    ????
    list ( $x , ? $y )???????? = ????draw_getexy( $a / 2 , ? $b / 2 , ?( $d + $sd ) / 2 );?
    ????imagefill(
    $img , ? $x + $ox , ? $y + $oy , ? $clr );?
    }?

    function ?draw_sector3d( $img , ? $ox , ? $oy , ? $a , ? $b , ? $v , ? $sd , ? $ed , ? $clr )???? // 3d扇面?
    {?
    ????draw_sector(
    $img , ? $ox , ? $oy , ? $a , ? $b , ? $sd , ? $ed , ? $clr );?
    ????
    if ( $sd < 180 )?
    ????{?
    ????????
    list ( $R , ? $G , ? $B )???? = ????draw_getdarkcolor( $img , ? $clr );?
    ????????
    $clr = imagecolorallocate( $img , ? $R , ? $G , ? $B );?
    ????????
    if ( $ed > 180 )? $ed ???????? = ???? 180 ;?
    ????????
    list ( $sx , ? $sy )???????? = ????draw_getexy( $a , $b , $sd );?
    ????????
    $sx ???????????????????? += ???? $ox ;?
    ????????
    $sy ???????????????????? += ???? $oy ;?
    ????????
    list ( $ex , ? $ey )???????? = ????draw_getexy( $a , ? $b , ? $ed );?
    ????????
    $ex ???????????????????? += ???? $ox ;?
    ????????
    $ey ???????????????????? += ???? $oy ;?
    ????????imageline(
    $img , ? $sx , ? $sy , ? $sx , ? $sy + $v , ? $clr );?
    ????????imageline(
    $img , ? $ex , ? $ey , ? $ex , ? $ey + $v , ? $clr );?
    ????????draw_arc(
    $img , ? $ox , ? $oy + $v , ? $a , ? $b , ? $sd , ? $ed , ? $clr );?
    ????????
    list ( $sx , ? $sy )???????? = ????draw_getexy( $a , ? $b , ?( $sd + $ed ) / 2 );?
    ????????
    $sy ???????????????????? += ???? $oy + $v / 2 ;?
    ????????
    $sx ???????????????????? += ???? $ox ;?
    ????????imagefill(
    $img , ? $sx , ? $sy , ? $clr );?
    ????}?
    }?

    function ?draw_getindexcolor( $img , ? $clr )???? // RBG轉索引色?
    {?
    ????
    $R ???????? = ????( $clr >> 16 )? & ? 0xff ;?
    ????
    $G ???????? = ????( $clr >> 8 ) & ? 0xff ;?
    ????
    $B ???????? = ????( $clr )? & ? 0xff ;?
    ????
    return ?imagecolorallocate( $img , ? $R , ? $G , ? $B );?
    }?

    // ?繪圖主函數,并輸出圖片?
    //?$datLst?為數據數組,?$datLst?為標簽數組,?$datLst?為顏色數組?
    //?以上三個數組的維數應該相等?

    function ?draw_img( $datLst , $labLst , $clrLst , $a = 250 , $b = 120 , $v = 20 , $font = 10 )?
    {?
    ????
    $ox ???????? = ???? 5 + $a ;?
    ????
    $oy ???????? = ???? 5 + $b ;?
    ????
    $fw ???????? = ????imagefontwidth( $font );?
    ????
    $fh ???????? = ????imagefontheight( $font );?

    ????
    $n ???????? = ???? count ( $datLst ); // 數據項個數?

    ????
    $w ???????? = ???? 10 + $a * 2 ;?
    ????
    $h ???????? = ???? 10 + $b * 2 + $v + ( $fh + 2 ) * $n ;?

    ????
    $img ???? = ????imagecreate( $w , ? $h );?

    ????
    // 轉RGB為索引色?
    ???? for ( $i = 0 ;? $i < $n ;? $i ++ )?
    ????????
    $clrLst [ $i ]???? = ????draw_getindexcolor( $img , $clrLst [ $i ]);?

    ????
    $clrbk ???? = ????imagecolorallocate( $img , ? 0xff , ? 0xff , ? 0xff );?
    ????
    $clrt ???? = ????imagecolorallocate( $img , ? 0x00 , ? 0x00 , ? 0x00 );?

    ????
    // 填充背景色?
    ????imagefill( $img , ? 0 , ? 0 , ? $clrbk );?

    ????
    // 求和?
    ???? $tot ???? = ???? 0 ;?
    ????
    for ( $i = 0 ;? $i < $n ;? $i ++ )?
    ????????
    $tot ???? += ???? $datLst [ $i ];?

    $sd ???????? = ???? 0 ;?
    ????
    $ed ???????? = ???? 0 ;? 333
    ????
    $ly ???????? = ???? 10 + $b * 2 + $v ;?
    ????
    for ( $i = 0 ;? $i < $n ;? $i ++ )?
    ????{?
    ????????
    $sd ???? = ???? $ed ;?
    ????????
    $ed ???? += ???? $datLst [ $i ] / $tot * 360 ;?

    ????????
    // 畫圓餅?
    ????????draw_sector3d( $img , ? $ox , ? $oy , ? $a , ? $b , ? $v , ? $sd , ? $ed , ? $clrLst [ $i ]);????

    // $sd,$ed,$clrLst[$i]);?

    ????????//畫標簽?

    ????????imagefilledrectangle( $img , ? 5 , ? $ly , ? 5 + $fw , ? $ly + $fh , ? $clrLst [ $i ]);?
    ????????imagerectangle(
    $img , ? 5 , ? $ly , ? 5 + $fw , ? $ly + $fh , ? $clrt );?
    ????????
    // imagestring($img,?$font,?5+2*$fw,?$ly,?$labLst[$i].":".$datLst

    [
    $i ] . " ( " . ( round ( 10000 * ( $datLst [ $i ] / $tot )) / 100 ) . " %) " , ? $clrt );?

    ????????
    $str ???? = ???? iconv ( " GB2312 " , ? " UTF-8 " , ? $labLst [ $i ]);?
    ????????ImageTTFText(
    $img , ? $font , ? 0 , ? 5 + 2 * $fw , ? $ly + 13 , ? $clrt , ? " ./simsun.ttf " , ?

    $str . " : " . $datLst [ $i ] . " ( " . ( round ( 10000 * ( $datLst [ $i ] / $tot )) / 100 ) . " %) " );?
    ????????
    $ly ???????? += ???? $fh + 2 ;?
    ????}?

    ????
    // 輸出圖形?
    ???? header ( " Content-type:?image/png " );?

    ????
    // 輸出生成的圖片?
    ???? $imgFileName ? = ? " ../temp/ " . time () . " .png " ;?
    ????imagepng(
    $img , $imgFileName );?
    ????
    echo ? ' <IMG?SRC=" ' . $imgFileName . ' "?BORDER="1"?ALT="統計餅圖"> ' ;?
    }?

    $datLst ???? = ???? array ( 30 , ? 10 , ? 20 , ? 20 , ? 10 , ? 20 , ? 10 , ? 20 );???? // 數據?
    $labLst ???? = ???? array ( " 中國科技大學 " , ? " 安徽理工大學 " , ? " 清華大學 " , ? " 北京大學 " , ?

    " 南京大學 " , ? " 上海大學 " , ? " 河海大學 " , ? " 中山大學 " );???? // 標簽?
    $clrLst ???? = ???? array ( 0x99ff00 , ? 0xff6666 , ? 0x0099ff , ? 0xff99ff , ? 0xffff99 , ?

    0x99ffff , ? 0xff3333 , ? 0x009999 );?

    // 畫圖?
    draw_img( $datLst , $labLst , $clrLst );?
    ?> ?


    //圖形類->gd.class.php
    <?php

    class GD{
    ?/*
    函數說明
    $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 {
    ?#echo $tmp." ";
    ?$x1=(($width-50)/count($data))*($i)+40;
    ?#echo $x1 ." ";
    ?$y1=$height-$graphdata[$i]*$jc;
    ?$x2=$x1;
    ?$y2=$y1+$graphdata[$i]*$jc;
    ?#echo $y1." ";
    ?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);
    }
    //為了方便起見,我又做了一個函數來制作柱型圖
    /*參數說明:
    $graphdata:百分比數據(y軸)
    $label:x軸標題
    $data:實際數據(y軸)
    $graphwidth:圖像寬度
    $graphheight:圖像高度
    $graphscale:高度因子(為$graphheight/100)
    $graphfont:字體號
    $bg;背景顏色值
    $text:文本顏色值
    $grid:邊線顏色值
    $bar:柱的顏色值
    $bz:備注(不支持中文呀)
    */
    ?function timage(
    ?$graphdata,$label,$data,
    ?$graphwidth,$graphheight,$graphscale,$graphfont,
    ?$bg,$text,$grid,$bar,$bz)
    ?{

    ?header("Content-type:image/gif");
    ?$image=imagecreate($graphwidth+50,$graphheight+50);
    ?$bgcolor= imagecolorallocate ($image ,$bg[0],$bg[1],$bg[2]);
    ?$textcolor= imagecolorallocate ($image ,$text[0],$text[1],$text[2]);
    ?$gridcolor=imagecolorallocate ($image ,$grid[0],$grid[1],$grid[2]);
    ?$barcolor=imagecolorallocate ($image ,$bar[0],$bar[1],$bar[2]);
    ?$gridabelwidth=imagefontwidth($graphfont)*3+1;
    ?$gridableheight= imagefontheight ($graphfont);
    ?imageline($image,$gridlabelwidth,0,$gridlabelwidth,$graphheight-

    1,$gridcolor);
    ?imageline($image,0,$graphheight-1,$graphwidth-1,$graphheight-1,$gridcolor);
    ?for($i=0;$i<$graphheight;$i+=$graphheight/10)
    ?{
    ? imagedashedline ($image,0,$i,$graphwidth-1,$i,$gridcolor);
    ? imagestring($image,$graphfont,0,$i,round(($graphheight-$i)/

    $graphscale),$textcolor);
    ?}

    ?$barwidth=(($graphwidth-$gridlabelwidth)/count($graphdata))-

    30;#&iquest;&Oslash;&Ouml;&AElig;&Ouml;ù&micro;&Auml;×

    &Uuml;&iquest;í&para;&Egrave;
    ?for($i=0;$i {
    ? $bartopx=$gridlabelwidth+(($i+1)*20)+

    ($i*$barwidth);#&iquest;&Oslash;&Ouml;&AElig;&Ouml;ù&iquest;&iquest;×

    ó&micro;&Auml;&frac34;à&Agrave;&euml;
    ? $barbottomx=$bartopx+$barwidth;? $barbottomy=$graphheight-

    1;#&iquest;&Oslash;&Ouml;&AElig;&Ouml;ù&micro;&Auml;&Iuml;&Acirc;±

    &szlig;&frac12;&ccedil;
    ? $bartopy=$barbottomy-($graphdata[$i]*$graphscale);
    ? imagefilledrectangle

    ($image,$bartopx,$bartopy,$barbottomx,$barbottomy,$barcolor);
    ? $labelx1=$bartopx;
    ? $labely1=$bartopy-15;
    ? $labelx2=$bartopx;
    ? $labely2=$graphheight;
    ? imagestring($image,$graphfont,$labelx1,$labely1,"$graphdata

    [$i]"."%",$textcolor);
    ? imagestring($image,$graphfont,$labelx2,$labely2,"$label[$i]",$textcolor);
    ? imagestringup ($image,$graphfont,$labelx1+10,$labely1-

    $gridableheight,"$data[$i]",$textcolor);
    ?}
    ?imagestring($image,$graphfont,1,$graphheight+30,$bz,$textcolor);
    ?imagegif ($image);
    ?}

    //PHP數據餅圖
    ?define("ANGLE_STEP", 5);??? //定義畫橢圓弧時的角度步長

    function draw_getdarkcolor($img,$clr)??? //求$clr對應的暗色
    {
    ??? $rgb??? =??? imagecolorsforindex($img,$clr);
    ??? return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2);
    }

    function draw_getexy($a, $b, $d)??? //求角度$d對應的橢圓上的點坐標
    {
    ??? $d??????? =??? deg2rad($d);
    ??? return array(round($a*Cos($d)), round($b*Sin($d)));
    }

    function draw_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr)??? //橢圓弧函數
    {
    ??? $n??????????????????? =??? ceil(($ed-$sd)/ANGLE_STEP);
    ??? $d??????????????????? =??? $sd;
    ??? list($x0,$y0)??????? =??? draw_getexy($a,$b,$d);
    ??? for($i=0; $i<$n; $i++)

    {
    ??????? $d??????????????? =??? ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
    ??????? list($x, $y)??? =??? draw_getexy($a, $b, $d);
    ??????? imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
    ??????? $x0??????????????? =??? $x;
    ??????? $y0??????????????? =??? $y;
    ??? }
    }

    function draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr)??? //畫扇面
    {
    ??? $n??????????????????? =??? ceil(($ed-$sd)/ANGLE_STEP);
    ??? $d??????????????????? =??? $sd;
    ??? list($x0,$y0)??????? =??? draw_getexy($a, $b, $d);
    ??? imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr);
    ??? for($i=0; $i<$n; $i++)
    ??? {
    ??????? $d??????????????? =??? ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
    ??????? list($x, $y)??? =??? draw_getexy($a, $b, $d);
    ??????? imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
    ??????? $x0??????????????? =??? $x;
    ??????? $y0??????????????? =??? $y;
    ??? }
    ??? imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr);
    ??? list($x, $y)??????? =??? draw_getexy($a/2, $b/2, ($d+$sd)/2);
    ??? imagefill($img, $x+$ox, $y+$oy, $clr);
    }

    function draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clr)??? //3d扇面
    {
    ??? draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr);
    ??? if($sd<180)
    ??? {
    ??????? list($R, $G, $B)??? =??? draw_getdarkcolor($img, $clr);
    ??????? $clr=imagecolorallocate($img, $R, $G, $B);
    ??????? if($ed>180) $ed??????? =??? 180;
    ??????? list($sx, $sy)??????? =??? draw_getexy($a,$b,$sd);
    ??????? $sx??????????????????? +=??? $ox;
    ??????? $sy??????????????????? +=??? $oy;
    ??????? list($ex, $ey)??????? =??? draw_getexy($a, $b, $ed);
    ??????? $ex??????????????????? +=??? $ox;
    ??????? $ey??????????????????? +=??? $oy;
    ??????? imageline($img, $sx, $sy, $sx, $sy+$v, $clr);
    ??????? imageline($img, $ex, $ey, $ex, $ey+$v, $clr);
    ??????? draw_arc($img, $ox, $oy+$v, $a, $b, $sd, $ed, $clr);
    ??????? list($sx, $sy)??????? =??? draw_getexy($a, $b, ($sd+$ed)/2);
    ??????? $sy??????????????????? +=??? $oy+$v/2;
    ??????? $sx??????????????????? +=??? $ox;
    ??????? imagefill($img, $sx, $sy, $clr);
    ??? }
    }

    function draw_getindexcolor($img, $clr)??? //RBG轉索引色
    {
    ??? $R??????? =??? ($clr>>16) & 0xff;
    ??? $G??????? =??? ($clr>>8)& 0xff;
    ??? $B??????? =??? ($clr) & 0xff;
    ??? return imagecolorallocate($img, $R, $G, $B);
    }

    // 繪圖主函數,并輸出圖片
    // $datLst 為數據數組, $datLst 為標簽數組, $datLst 為顏色數組
    // 以上三個數組的維數應該相等
    function draw_img($datLst,$labLst,$clrLst,$a=250,$b=120,$v=20,$font=10)
    {
    ??? $ox??????? =??? 5+$a;
    ??? $oy??????? =??? 5+$b;
    ??? $fw??????? =??? imagefontwidth($font);
    ??? $fh??????? =??? imagefontheight($font);

    ??? $n??????? =??? count($datLst);//數據項個數

    ??? $w??????? =??? 10+$a*2;
    ??? $h??????? =??? 10+$b*2+$v+($fh+2)*$n;

    ??? $img??? =??? imagecreate($w, $h);

    ??? //轉RGB為索引色
    ??? for($i=0; $i<$n; $i++)
    ??????? $clrLst[$i]??? =??? draw_getindexcolor($img,$clrLst[$i]);

    ??? $clrbk??? =??? imagecolorallocate($img, 0xff, 0xff, 0xff);
    ??? $clrt??? =??? imagecolorallocate($img, 0x00, 0x00, 0x00);

    ??? //填充背景色
    ??? imagefill($img, 0, 0, $clrbk);

    ??? //求和
    ??? $tot??? =??? 0;
    ??? for($i=0; $i<$n; $i++)
    ??????? $tot??? +=??? $datLst[$i];

    $sd??????? =??? 0;
    ??? $ed??????? =??? 0; 333
    ??? $ly??????? =??? 10+$b*2+$v;
    ??? for($i=0; $i<$n; $i++)
    ??? {
    ??????? $sd??? =??? $ed;
    ??????? $ed??? +=??? $datLst[$i]/$tot*360;

    ??????? //畫圓餅
    ??????? draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clrLst[$i]);???

    //$sd,$ed,$clrLst[$i]);

    ??????? //畫標簽
    ??????? imagefilledrectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrLst[$i]);
    ??????? imagerectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrt);
    ??????? //imagestring($img, $font, 5+2*$fw, $ly, $labLst[$i].":".$datLst

    [$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)", $clrt);

    ??????? $str??? =??? iconv("GB2312", "UTF-8", $labLst[$i]);
    ??????? ImageTTFText($img, $font, 0, 5+2*$fw, $ly+13, $clrt, "./simsun.ttf",

    $str.":".$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)");
    ??????? $ly??????? +=??? $fh+2;
    ??? }

    ??? //輸出圖形
    ??? header("Content-type: image/png");

    ??? //輸出生成的圖片
    ??? $imgFileName = "../temp/".time().".png";
    ??? imagepng($img,$imgFileName);
    ??? echo '<IMG SRC="'.$imgFileName.'" BORDER="1" ALT="統計餅圖">';
    }

    $datLst??? =??? array(30, 10, 20, 20, 10, 20, 10, 20);??? //數據
    $labLst??? =??? array("中國科技大學", "安徽理工大學", "清華大學", "北京大學",

    "南京大學", "上海大學", "河海大學", "中山大學");??? //標簽
    $clrLst??? =??? array(0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99,

    0x99ffff, 0xff3333, 0x009999);

    //畫圖
    draw_img($datLst,$labLst,$clrLst);
    ?>

    posted on 2008-05-24 20:04 allic 閱讀(208) 評論(0)  編輯  收藏 所屬分類: PHP+MySQL開發
    主站蜘蛛池模板: 亚洲另类无码一区二区三区| 狠狠色香婷婷久久亚洲精品| 西西人体44rt高清亚洲| 亚洲性天天干天天摸| 亚洲国产精品日韩在线| 亚洲欧美乱色情图片| 日韩在线观看免费完整版视频| 国产精品福利片免费看| 9420免费高清在线视频| 女性无套免费网站在线看| 亚洲精品国产电影| 久久久久亚洲av无码专区喷水| 久久亚洲国产最新网站| 一级成人a做片免费| 99久热只有精品视频免费看| 最近中文字幕mv手机免费高清| 亚洲?V无码成人精品区日韩| 久久精品亚洲日本佐佐木明希| 亚洲人xxx日本人18| 人妻仑乱A级毛片免费看| 91久久成人免费| 又色又污又黄无遮挡的免费视| 国产亚洲精品资源在线26u| 亚洲五月综合缴情婷婷| jizz免费一区二区三区| 国产一卡2卡3卡4卡2021免费观看| 亚洲欧洲日产国码一级毛片| 亚洲福利视频一区二区三区| 黄色网址在线免费观看| 最近免费字幕中文大全视频| 国产免费av片在线无码免费看| 亚洲AV日韩AV永久无码下载| 亚洲AV日韩AV无码污污网站| 国产99视频精品免费专区| 欧洲美熟女乱又伦免费视频| 久久国产精品亚洲综合| 国产在亚洲线视频观看| 亚洲电影在线免费观看| 亚洲午夜无码久久久久| 亚洲欧美日韩久久精品| 日韩人妻一区二区三区免费|