検索
ホームページphp教程php手册グラフィックスクラス->gd.class.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{
 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 {
  imagedashedline ($image,0,$i,$graphwidth-1,$i,$gridcolor);
  imagestring($image,$graphfont,0,$i,round(($graphheight-$i)/$graphscale),$textcolor);
 }

 $barwidth=(($graphwidth-$gridlabelwidth)/count($graphdata))-30;#¿ØÖÆÖùµÄ×Ü¿í¶È
 for($i=0;$i {
  $bartopx=$gridlabelwidth+(($i+1)*20)+($i*$barwidth);#¿ØÖÆÖù¿¿×óµÄ¾àÀë
  $barbottomx=$bartopx+$barwidth;  $barbottomy=$graphheight-1;#¿ØÖÆÖùµÄϱ߽ç
  $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

{
        $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    {
        $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    {
        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);
}

// main 関数を描画し、画像を出力します
// $datLst はデータ配列、$datLst はラベル配列、$datLst はカラー配列です
// 上記 3 つの配列の次元は等しい必要があります
functiondraw_img ($datLst,$ LABLST, $ Clrlst, $ a = 250, $ B = 120, $ V = 20, $ FONT = 10) {
$ ox = 5+$ A
$ oy = 5+$ B; $font);
$fh = imagefontheight($font);

$n = count($datLst);// データ項目数

$w = 10+$a*2; 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); $img, 0x00, 0x00, 0x00);

//背景色を塗りつぶします

imagefill($img, 0, 0, $clrbk)

//合計

$tot = 0; ; $i $sd = 0;

$b*2+$v ;

for($i=0; $i {
$sd = $ed;
$ed += $datLst[$i]/$tot*360 Pie

draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clrLst[$i]); //$sd,$ed,$clrLst[$i] ; fh, $clrt);

//imagestring($img, $font, 5+2*$fw, $ly, $labLst[$i].":".$datLst[$i] ."(".( Round(10000*($datLst[$i]/$tot))/100)."%)", $clrt);", $labLst[$i]);
ImageTTFText($img, $font, 0, 5+2*$fw, $ly+13, $clrt, "./simsun.ttf", $str.":" .$datLst[$i]."(".(round(10000*($ datLst[$i]/$tot))/100)."%)");
}

//出力グラフィックス
header("Content-type: image/png");

//生成された画像を出力します

$imgFileName = "../temp/".time().".png";
imagepng($img,$imgFileName);

echo '統計円グラフ';

}

$datLst = array (30, 10, 20, 20, 10, 20, 10, 20); //Data
$labLst = array("大学「中国科学技術大学」、「安徽科学技術大学」、「清華大学」、「北京大学」、「南京大学」、「上海大学」、「河海大学」、「中山大学」) ; //タグ

$clrLst = array(0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99, 0xff3333, 0x009999);


/ /Draw
draw_img($datLst,$labLst); 、$clrLst);
?>

?>






声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター