recherche
Maisonphp教程php手册php打造智能化的柱状图程序,用于报表等

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 Bar Graph Program

* @license GPL

* @package

* @file GrapBar.php

* @date 2007-4-3

* @version 1.0

* @last modified

 

* 定义 柱状图(柱形图) 类

*

* 注意,使用前请确保字体路径存在并允许访问,如果出错,还要检查在php.ini配置中的open_basedir项,如果没此路径请添加,或在程序中设置包含

*

* 智能化的柱状图程序,用于报表等

*

***/

 

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

class SingleBar

{

private $_x;

private $_y;

private $_h;

public $_l = 50;

private $_w = null;

private $_srcPoints = array();

private $_points = array();

 

public function __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();

}

 

public function getSrcPoints()

{

return array(

array($this->_x , $this->_y),

array($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)),

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

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

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

);

}

 

public function getPoints()

{

$points = array();

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

{

$points[] = $val[0];

$points[] = $val[1];

}

return $points;

}

 

public function getTopPoints()

{

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

}

 

public function getBelowPoints()

{

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

}

 

public function getRightSidePoints()

{

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

}

 

public function 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); //画侧面边线

}

}

 

public function getRGB($color)

{

$ar = array();

$color = hexdec($color);

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

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

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

return $ar;

}

}

 

class Bar

{

private $_W;

private $_H;

private $_bgColor = "ffffff";

private $_barHeights = array();

private $_barTexts = array();

private $_barColors = array();

public $_title;

public $_paddingTop = 30;

public $_paddingBottom = 100;

public $_paddingLeft = 45;

public $_paddingRight = 2;

public $_barL = 50;

public $image;

 

public function __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);

}

 

public function stroke()

{

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

}

 

public function 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); //画刻度线

imagestring($this->image, 3, $x1-5-3-$str_w-1, $y1+10+($every_h*$i)-5, $value, 0x000000);

}

}

 

 

public function drawBars()

{

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

if (empty($this->_barColors))

{

$color = $this->setColor();

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

//shuffle($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 ? dechex($R) : '00';

$c2 = $G > 0 ? dechex($G) : '00';

$c3 = $B > 0 ? dechex($B) : '00';

 

$t_color = $b_color;

$s_color = $c1. $c2 . $c3;

 

$SingleBar = new SingleBar($x, $y, $h, $barL);

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

$i++;

}

}

 

public function drawTitle()

{

if (empty($this->_title))

{

return;

}

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

}

 

public function 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;

}

}

}

 

public function 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;

return $h;

}

 

public function resetHeight()

{

$padding_bottom = $this->resetPaddingBottom();

if ($this->_H - $padding_bottom

{

return 222 + $padding_bottom;

}

return $this->_H;

}

 

 

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

return $tx_w;

}

 

public function setBg($color)

{

$this->_bgColor = $color;

}

 

public function setTitle($title)

{

$this->_title = $title;

}

 

public function 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 = array();

for ($i=1; $i

{

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

}

 

return $color2;

}

 

public function getRGB($color)

{

$ar = array();

$color = hexdec($color);

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

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

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

return $ar;

}

}

 

/***/

$bar = new Bar(500, 300, array(600, 300, 30, 500, 400, 250, 350, 360), array('AAAAA', 'BBBBB', 'CCCCC', 'DDDDD', 'EEEEEE', 'FFFFFF', 'GGGGGGG', 'HHHHHHHHH'));

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

$bar->stroke();

/***/

?>

  以上所述就是本文的全部内容了,希望大家能够喜欢。

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.