ホームページ >バックエンド開発 >PHPチュートリアル >PHP GD ライブラリを使用して折れ線グラフを動的に生成するサンプル コード

PHP GD ライブラリを使用して折れ線グラフを動的に生成するサンプル コード

WBOY
WBOYオリジナル
2016-07-25 08:55:281544ブラウズ
  1. /**

  2. * php GD ライブラリは折れ線グラフ、棒グラフ、円グラフを生成します
  3. * by bbs.it-home.org
  4. */
  5. $img_gao=170;
  6. $img_kuan=0;
  7. $jiange=30;//点間の横座標 間隔、幅生成される画像は受信データの量に応じて自動的に変更されます
  8. $zuo=20;//左側は空白のままにしておきます
  9. $you=20;//右側は空白のままにしておきます
  10. $shang=20;//一番上の空のままにしておきます
  11. $xia=20;//空白のままにしておきます
  12. $zuidashujuzhi=1;
  13. $p_x = array();//点の横座標
  14. $p_y = array();//点の縦座標
  15. $y_name= split( ",",$_GET["x_name"]);
  16. if ($_GET["a"]=="") die("エラーID:0");
  17. $shuju=split(",", $_GET ["a"]);
  18. //縦軸の最大値を取得
  19. for($i=0;$i if(!is_numeric($shuju[ $i])) die("error id:1");
  20. if($shuju[$i]>$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];
  21. }
  22. //画像の幅を取得
  23. $ img_kuan=$zuo+$you +count($shuju)*$jiange;
  24. //次に画像リソースを作成します
  25. $image = imagecreate($img_kuan,$img_gao);
  26. //背景が灰色
  27. $white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE) ;
  28. //座標軸は黒で表示されます
  29. $zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);
  30. //ポリラインは青で表示されます
  31. $xian_yanse = imagecolorallocate($image , 0x00, 0x00, 0xFF);
  32. //座標を描画
  33. //水平軸
  34. imageline ($image, $zuo, $img_gao-$xia, $img_kuan-$you/2, $img_gao-$xia, $zuobiao_yanse) ;
  35. //縦軸
  36. imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse);
  37. //各点の座標を取得
  38. for($i=0; $i array_push ($p_x, $zuo+$i*$jiange);
  39. array_push ($p_y, $shang+round(($img_gao-$shang-$xia)* (1-$shuju[$i] /$zuidashujuzhi)));
  40. }
  41. //縦軸スケール
  42. imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);
  43. imagestring ( $image, 1, $zuo/ 4, $shang,$zuidashujuzhi, $zuobiao_yanse);
  44. imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+ 6, $shang+($img_gao-$shang-$xia)*1/4, $zuobiao_yanse);
  45. 画像文字列 ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*1 /4,$zuidashujuzhi*3/4 , $zuobiao_yanse);
  46. imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*2/4, $zuo+6, $shang+($img_gao -$shang-$xia)*2 /4, $zuobiao_yanse);
  47. 画像文字列 ($image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,$zuidashujuzhi*2 /4, $zuobiao_yanse);
  48. imageline ($image, $zuo, $shang+($img_gao-$shang-$xia)*3/4, $zuo+6, $shang+($img_gao-$shang-$xia) *3/4, $zuobiao_yanse);
  49. imagestring ($image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,$zuidashujuzhi*1/4, $zuobiao_yanse);
  50. //横軸スケール
  51. for( $i=0;$i imageline ( $image, $zuo+$i*$jiange, $img_gao-$xia, $zuo+$ i*$jiange, $img_gao-$ xia-6, $zuobiao_yanse);
  52. imagestring ( $image, 1, $zuo+$i*$jiange-$jiange/4, $shang+($img_gao-$shang-$xia) +2,$y_name[$i] , $zuobiao_yanse);
  53. }

  54. //ポリライン

  55. $shuju_yanse_int=0;
  56. for($i=0;$i if( $i+1<>count($shuju)){
  57. イメージライン ( $image, $p_x[$i], $p_y[$i], $p_x[$i+1] ], $p_y[$i+1 ], $xian_yanse);
  58. imagefilledrectangle($image, $p_x[$i]-1, $p_y[$i]-1, $p_x[$i]+1, $p_y [$i]+1, $xian_yanse );
  59. }
  60. }
  61. //最後のループは最後のポイントエフェクトを描画しませんでした。ここで
  62. imagefilledrectangle($image, $p_x[count($shuju)-1) を追加する必要があります]-1, $p_y[count($shuju)-1]-1, $p_x[count($shuju)-1]+1, $p_y[count($shuju)-1]+1, $xian_yanse);

  63. //データ値をマーク

  64. for($i=0;$i imagestring ( $image, 3, $p_x[$i] +4, $p_y[$i]- 12,$shuju[$i], $zuobiao_yanse);
  65. }
  66. //ファイルヘッダーを設定
  67. header('Content-type: image/png');
  68. //出力image
  69. imagepng($image);
  70. / /リソースを解放
  71. imagedestroy($image);
  72. ?>

コードをコピー

2番目、使い方 画像を表示する必要がある場所に次のコードを挿入します。

コードをコピー

手順: a の値は自分で計算します。 aのテキスト形式は、getメソッドで渡される複数のデータを「,」で連結した文字列です。 中国語をグラフィックスに書き込むには、より多くの PHP 環境構成が必要となるため、HTML ソリューションを次に示します。 データ数に基づいて横軸の座標スケール名を配置するテーブルを動的に生成するだけで済みます。

例:

  1. for($ i=0;$i<12;$i++) {
  2. echo "
  3. ";
  4. }
  5. ?>
  6. ".$i."月
コードをコピー


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