巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

php打造智能化的柱状图法式,用于报表等

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-28 13:45:23 阅读数: 92

php打造智能化的柱状图法式,用于报表等

<?php /***  * @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<=10; $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<=10; $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 < 222)  {   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<6; $i++)  {   for ($j=0; $j<6; $j++)   {   for($k=0; $k<6; $k++)   {    $color[] = $ar[$i] . $ar[$j] . $ar[$k];   }   }  }     $color2 = array();  for ($i=1; $i<216; $i += 4)  {   $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(); /***/ ?>

以上所述便是本文的全数内容了,但愿大师能够或许喜好。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

27
03月
说到微信营销,不得不谈当下正火的萝卜客微信云

简介:尽人皆知,跟着微信各项法则的垂垂完善,大局部群控体系和云控已死伤殆尽。再也不群控体系宣扬---“暴力引流,无上限加粉”的夸大告白,许... >>概况

01
04月
十大游览营销推行典范案例

简介:【举世旅讯】本文编译自Econsultancy:在此,咱们来看看环球游览企业,若何借助交际媒体、创意营销勾当、假造实际等东西,晋升与用... >>概况

29
04月
php缓冲 output_buffering

bufferbuffer是一个内存地点空间,Linux体系默许巨细普通为4096(4kb),即一个内存页。首要用于存储速率差别步的装备或优... >>概况

18
05月
搜索引擎优化排名教程_巅云建站

ta charset="UTF-8"> 搜索引擎优化排名教程_巅云建站 a:hover, a:focus,.post-like.acti... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站