ホームページ  >  記事  >  バックエンド開発  >  PHP はレポートなどのためのインテリジェントなヒストグラム プログラムを作成します_PHP チュートリアル

PHP はレポートなどのためのインテリジェントなヒストグラム プログラムを作成します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:49:49829ブラウズ

phpはレポートなどのためのインテリジェントな棒グラフプログラムを作成します。

この記事は主にレポートなどのためのインテリジェントな棒グラフプログラムを作成するためのphpに関する関連情報を紹介します。必要な友人は参照してください

PHP はレポートなどのためのインテリジェントなヒストグラム プログラムを作成します

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

/***

* @project 棒グラフ プログラム

* @ライセンス GPL

* @package

* @file GrapBar.php

* @日付 2007-4-3

* @バージョン 1.0

* @最終更新日

* 定義ヒストグラム (縦棒グラフ) クラス

*

* 注意: 使用する前に、フォントのパスが存在し、アクセスが許可されていることを確認してください。エラーが発生した場合は、php.ini 設定の open_basedir 項目を確認してください。そのようなパスがない場合は、追加するか、プログラムに設定してください。

を含める

*

* レポートなどのためのインテリジェントな棒グラフ プログラム

*

***/

define("DEFAULT_FONT_PATH", "c:/windows/fonts/simhei.ttf");

クラスシングルバー

{

プライベート $_x;

プライベート $_y;

プライベート $_h;

公開 $_l = 50;

プライベート $_w = null;

プライベート $_srcPoints = array();

プライベート $_points = array();

パブリック関数 __construct($x, $y, $h, $l = 50, $w = null)

{

$this->_x = $x;

$this->_y = $y;

$this->_h = $h;

$this->_l = $l;

$this->_w = $w;

$this->_srcPoints = $this->getSrcPoints();

$this->_points = $this->getPoints();

}

パブリック関数 getSrcPoints()

{

配列を返す(

配列($this->_x , $this->_y),

配列($this->_x+$this->_l , $this->_y),

array($this->_x+(1.35*$this->_l), $this->_y-(0.35*$this->_l)),

array($this->_x+(0.35*$this->_l), $this->_y-(0.35*$this->_l)),

配列($this->_x , $this->_y+$this->_h),

array($this->_x+$this->_l , $this->_y+$this->_h),

配列($this->_x+(1.35*$this->_l), $this->_y+$this->_h-(0.35*$this->_l))

);

}

パブリック関数 getPoints()

{

$points = array();

foreach($this->_srcPoints as $key => $val)

{

$ポイント[] = $val[0];

$points[] = $val[1];

}

$ポイントを返す;

}

パブリック関数 getTopPoints()

{

return array_slice($this->_points, 0, 8); //顶坐标

}

パブリック関数 getBelowPoints()

{

return array_merge(array_slice($this->_points, 0, 2), array_slice($this->_points, 8, 4), array_slice($this->_points, 2, 2)); //下坐标

}

パブリック関数 getRightSidePoints()

{

return array_merge(array_slice($this->_points, 2, 2), array_slice($this->_points, 10, 4), array_slice($this->_points, 4, 2)); //右侧坐标

}

パブリック関数draw($image, $topColor, $belowColor, $sideColor, $borderColor = null, $type = 'LEFT')

{

if (is_null($borderColor))

{

$borderColor = 0xcccccc;

}

$top_rgb = $this->getRGB($topColor);

$below_rgb = $this->getRGB($belowColor);

$side_rgb = $this->getRGB($sideColor);

$top_color = imagecolorallocate($image, $top_rgb['R'], $top_rgb['G'], $top_rgb['B']);

$below_color = imagecolorallocate($image, $below_rgb['R'], $below_rgb['G'], $below_rgb['B']);

$side_color = imagecolorallocate($image, $side_rgb['R'], $side_rgb['G'], $side_rgb['B']);

imagefilledpolygon($image, $this->getTopPoints(), 4, $top_color); //画顶面

imagepolygon($image, $this->getTopPoints(), 4, $borderColor); //画顶面边線

imagefilledpolygon($image, $this->getBelowPoints(), 4, $below_color); //画下

imagepolygon($image, $this->getBelowPoints(), 4, $borderColor); //画下边線

if ($type == 'LEFT')

{

imagefilledpolygon($image, $this->getRightSidePoints(), 4, $side_color); //画右側面

imagepolygon($image, $this->getRightSidePoints(), 4, $borderColor); //画面边線

}

}

パブリック関数 getRGB($color)

{

$ar = 配列();

$color = hexdec($color);

$ar['R'] = ($color>>16) & 0xff;

$ar['G'] = ($color>>8) & 0xff;

$ar['B'] = ($color) & 0xff;

$ar を返す;

}

}

クラスバー

{

プライベート $_W;

プライベート $_H;

プライベート $_bgColor = "ffffff";

プライベート $_barHeights = array();

プライベート $_barTexts = array();

プライベート $_barColors = array();

公開 $_title;

パブリック $_paddingTop = 30;

パブリック $_paddingBottom = 100;

パブリック $_paddingLeft = 45;

パブリック $_paddingRight = 2;

パブリック $_barL = 50;

公開 $image;

パブリック関数 __construct($imgW, $imgH, $barHeights, $barTexts = null, $barColors = null)

{

$this->_W = $imgW;

$this->_H = $imgH;

$this->_barHeights = $barHeights;

$this->_barTexts = $barTexts;

$this->_barColors = $barColors;

$this->_paddingBottom = $this->resetPaddingBottom();

$this->_H = $this->resetHeight();

$this->image = imagecreatetruecolor($this->_W, $this->_H);

}

パブリック関数ストローク()

{

$this->drawBg();

$this->drawBars();

$this->drawTitle();

$this->drawLables();

ob_start();

//header("Content-type: image/png");

//imagepng($this->image);

header("Content-type: " .image_type_to_mime_type(IMAGETYPE_JPEG));

imagejpeg($this->image);

imagedestroy($this->image);

}

パブリック関数drawBg()

{

$img_w = $this->_W;

$img_h = $this->_H;

$paddingTop = $this->_paddingTop;

$paddingBottom = $this->_paddingBottom;

$paddingLeft = $this->_paddingLeft;

$paddingRight = $this->_paddingRight;

$rgb = $this->getRGB($this->_bgColor);

$bg = imagecolorallocate($this->image,$rgb['R'], $rgb['G'], $rgb['B']);

imagefilledrectangle($this->image, 0, 0, $img_w, $img_h, $bg);

$side_bg = imagecolorallocatealpha($this->image, 220, 220, 220, 75);

$side_bg2 = imagecolorallocate($this->image, 220, 220, 220);

$border_color = imagecolorallocate($this->image, 190, 190, 190);

$line_color = imagecolorallocate($this->image, 236, 236, 236);

$dial_color = imagecolorallocate($this->image, 131, 131, 131);

$x1 = $paddingLeft;

$y1 = $paddingTop;

$x2 = $img_w - $paddingRight;

$y2 = $img_h - $paddingBottom;

imagerectangle($this->image, $x1, $y1, $x2, $y2, $border_color);

imagefilledpolygon($this->image, array($x1-5,$y1+10, $x1-5,$y2+10, $x1,$y2, $x1,$y1), 4, $side_bg) ;

imagepolygon($this->image, array($x1-5,$y1+10, $x1-5,$y2+10, $x1,$y2, $x1,$y1), 4, $border_color) ;

imagefilledpolygon($this->image, array($x1-5,$y2+10, $x2-5,$y2+10, $x2,$y2, $x1,$y2), 4, $side_bg) ;

imagepolygon($this->image, array($x1-5,$y2+10, $x2-5,$y2+10, $x2,$y2, $x1,$y2), 4, $border_color) ;

imageline($this->image, $x1, $y2, $x2, $y2, $side_bg2);

$total_h = $img_h - $paddingTop - $paddingBottom;

$every_h = $total_h/11;

for($i=1; $i

{

imageline($this->image, $x1, $y1+($every_h*$i), $x2, $y1+($every_h*$i), $line_color); //画ネット

}

$max_h = max($this->_barHeights);

for($i=1; $i

{

$value = $max_h - (($max_h/10)*($i-1));

$value = strval($value);

$str_w = strlen($value)*5;

imageline($this->image, $x1-5-3, $y1+10+($every_h*$i), $x1-3+1, $y1+10+($every_h*$i), $dial_color); //画刻度ライン

画像文字列($this->image, 3, $x1-5-3-$str_w-1, $y1+10+($every_h*$i)-5, $value, 0x000000);

}

}

パブリック関数drawBars()

{

$counts = count($this->_barHeights);

if (空($this->_barColors))

{

$color = $this->setColor();

$this->_barColors = array_slice($color, 0, $counts);

//シャッフル($this->_barColors);

}

$every_w = ($this->_W - $this->_paddingLeft - $this->_paddingRight)/$counts; //每第一段宽

$barL = $every_w;

$barL = ($barL > $this->_barL*1.35+6) ? $this->_barL : $barL/1.35 - 6;

$max_h = max($this->_barHeights);

$ruler_h = $this->_H - $this->_paddingTop - $this->_paddingBottom; //标尺总高さ

$stander_h = $ruler_h - ($ruler_h/11); //标尺10等分の高さ

$i = 0;

foreach ($this->_barHeights as $val)

{

$h = ($stander_h/$max_h)*$val;

$x = $this->_paddingLeft + ($every_w*$i) + (($every_w - ($barL*1.35))/2);;

$y = $this->_H - $this->_paddingBottom + 10 - $h;

//$t_color = $this->_barColors[$i];

$b_color = $this->_barColors[$i];

//$s_color = $this->_barColors[$i];

$rgb = $this->getRGB($this->_barColors[$i]);

$R = $rgb['R'] * 0.7;

$G = $rgb['G'] * 0.7;

$B = $rgb['B'] * 0.7;

$c1 = $R > 0 ?デチェックス($R) : '00';

$c2 = $G > 0 ?デチェックス($G) : '00';

$c3 = $B > 0 ?デチェックス($B) : '00';

$t_color = $b_color;

$s_color = $c1。 $c2 。 $c3;

$SingleBar = 新しい SingleBar($x, $y, $h, $barL);

$SingleBar->draw($this->image, $t_color, $b_color, $s_color);

$i++;

}

}

パブリック関数drawTitle()

{

if (空($this->_title))

{

戻る;

}

$font = 5;

$font_w = imagefontwidth($font);

$len = strlen($this->_title);

$x = ($this->_W + $this->_paddingLeft - $this->_paddingRight)/2;

$x -= ($len*$font_w)/2;

$y = ($this->_paddingTop - $font_w)/2 + 12;

//imagestring($this->image, $font, $x, $y, $title, 0x000000);

imagettftext($this->image, 12, 0, $x, $y, 0x000000, DEFAULT_FONT_PATH, $this->_title);

}

パブリック関数drawLables()

{

$x1 = $this->_paddingLeft - 5;

$y1 = $this->_H - $this->_paddingBottom + 20;

$x2 = $this->_W - $this->_paddingRight;

$y2 = $this->_H - 10;

//imagefilledrectangle($this->image, $x1, $y1, $x2, $y2, 0xffffff);

imagerectangle($this->image, $x1, $y1, $x2, $y2, 0x000000);

$space = 5;

$x = $x1 + 3;

$y = $y1 + 3;

foreach ($this->_barTexts as $key => $val)

{

$color = $this->_barColors[$key];

$rgb = $this->getRGB($color);

$bg = imagecolorallocate($this->image,$rgb['R'], $rgb['G'], $rgb['B']);

imagefilledrectangle($this->image, $x, $y, $x+12, $y+12, $bg); //绘12*12の四角形

imagerectangle($this->image, $x, $y, $x+12, $y+12, 0x000000); //绘12*12の四角形

imagettftext($this->image, 12, 0, $x+12+3, $y+12, 0x000000, DEFAULT_FONT_PATH, $val);

$x += 12 + $space + (strlen($val)*8) + $space;

if ($x + (strlen($val)*8) >= $this->_W - $this->_paddingLeft - $this->_paddingRight)

{

$x = $x1 + 3;

$y = $y + 12 + 3;

}

}

}

パブリック関数resetPaddingBottom()

{

$ruler_w = $this->_W - $this->_paddingLeft - $this->_paddingRight;

$label_w = $this->getLableTotalWidth();

$lines = ceil($label_w / $ruler_w);

$h = 12 * $lines + (3 * ($lines + 1)) + 30;

$h を返す;

}

パブリック関数resetHeight()

{

$padding_bottom = $this->resetPaddingBottom();

if ($this->_H - $padding_bottom

{

return 222 + $padding_bottom;

}

$this を返す->_H;

}

パブリック関数 getLableTotalWidth()

{

$counts = count($this->_barTexts);

$space = 5;

$total_len = 0;

foreach ($this->_barTexts as $val)

{

$total_len += strlen($val);

}

$tx_w = ($total_len * 9) + ((12 + 3 + $space) * $counts);

$tx_w を返す;

}

パブリック関数 setBg($color)

{

$this->_bgColor = $color;

}

パブリック関数 setTitle($title)

{

$this->_title = $title;

}

パブリック関数 setColor()

{

$ar = array('ff', '00', '33', '66', '99', 'cc');

$color = array();

for ($i=0; $i

{

for ($j=0; $j

{

for($k=0; $k

{

$color[] = $ar[$i] 。 $ar[$j] 。 $ar[$k];

}

}

}

$color2 = 配列();

for ($i=1; $i

{

$color2[] = $color[$i];

}

$color2 を返す;

}

パブリック関数 getRGB($color)

{

$ar = 配列();

$color = hexdec($color);

$ar['R'] = ($color>>16) & 0xff;

$ar['G'] = ($color>>8) & 0xff;

$ar['B'] = ($color) & 0xff;

$ar を返す;

}

}

/***/

$bar = 新しい Bar(500, 300, array(600, 300, 30, 500, 400, 250, 350, 360), array('AAAAA', 'BBBBB', 'CCCCC', 'DDDDD', 'EEEEEE) '、'FFFFFF'、'GGGGGG'、'HHHHHHHHH'));

$bar->setTitle('打造完美柱状態图!');

$bar->ストローク();

/***/

?>

以上記載は本文の全内容です、大家様に喜んでいただければ幸いです。

http://www.bkjia.com/PHPjc/1018925.html

tru​​ehttp://www.bkjia.com/PHPjc/1018925.html技術記事 php打造智能化の柱状図程序、表等用 この篇文章主介绍了php打造智能化の柱状図程程、表等の関連资料、必要な朋友参照可能...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。