亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

php打造智能化的柱狀圖程序,用于報表等

2024-04-25 20:37:32
字體:
來源:轉載
供稿:網友

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

/***/

?>

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产美女被下药99| 懂色av一区二区三区| 亚洲黄色在线观看| 成人精品在线观看| 欧美区二区三区| 国产极品精品在线观看| 亚洲2020天天堂在线观看| 91免费的视频在线播放| 亚洲天堂av网| 国自产精品手机在线观看视频| 欧洲永久精品大片ww免费漫画| 日本久久久久久久久| 91国内精品久久| 日韩中文字幕在线播放| 久久九九国产精品怡红院| 主播福利视频一区| 亚洲精品国产成人| 精品视频久久久| 国产亚洲一级高清| 国产极品精品在线观看| 亚洲一级免费视频| 欧美日韩在线视频观看| 亚洲精品美女视频| 国产91ⅴ在线精品免费观看| 国产精品自产拍在线观| 亚洲欧美国产视频| 91精品国产精品| 正在播放亚洲1区| 精品女同一区二区三区在线播放| 亚洲国产日韩欧美在线动漫| 国产999精品久久久影片官网| 欧美一级bbbbb性bbbb喷潮片| 欧美一区二粉嫩精品国产一线天| 欧美成人精品一区二区| 日韩一级裸体免费视频| 亚洲女性裸体视频| 日韩大片免费观看视频播放| 成人福利视频在线观看| 91chinesevideo永久地址| 欧美黑人性视频| 中文字幕精品av| 精品国产一区二区三区在线观看| 久久久久久久久久久免费精品| 日韩视频在线一区| 欧美专区中文字幕| 国产精品欧美在线| 日韩精品极品在线观看播放免费视频| 亚洲黄色成人网| 午夜伦理精品一区| 亚洲精选中文字幕| 国产日本欧美一区| 亚洲激情视频在线播放| 国外视频精品毛片| 亚洲国产成人91精品| 久久精品久久久久久国产 免费| 成人免费在线视频网址| 国产一区二区三区精品久久久| 国产一区二区三区在线播放免费观看| 91久久嫩草影院一区二区| 欧美成人全部免费| 日本亚洲精品在线观看| 2019中文字幕在线免费观看| 欧美专区日韩视频| 欧美日韩国产一中文字不卡| 日韩精品视频免费专区在线播放| 欧美在线免费看| 一本色道久久综合狠狠躁篇怎么玩| 日韩免费看的电影电视剧大全| 日韩电影免费在线观看中文字幕| 欧美电影在线播放| 亚洲精品欧美日韩专区| 一夜七次郎国产精品亚洲| 伊人伊成久久人综合网小说| 亚洲第一福利视频| 日韩美女免费线视频| 亚洲乱码国产乱码精品精天堂| 日韩免费观看在线观看| 91精品国产成人www| 久久久国产91| 日韩中文字幕不卡视频| 亚洲国产精彩中文乱码av| 精品少妇v888av| 精品视频久久久久久久| 国产精品欧美日韩| 久久国产精品网站| 91夜夜揉人人捏人人添红杏| 8x拔播拔播x8国产精品| 久久影院模特热| 一区二区三区天堂av| 欧美激情精品久久久久久大尺度| 亚洲加勒比久久88色综合| 国产精品自拍偷拍视频| 亚洲影院高清在线| 55夜色66夜色国产精品视频| 亚洲欧洲日产国码av系列天堂| 欧美激情视频在线免费观看 欧美视频免费一| 69av在线视频| 日韩一区av在线| 欧美第一淫aaasss性| 日韩电影在线观看永久视频免费网站| 久久国产精品久久久久久久久久| 欧美黑人一区二区三区| 成人激情黄色网| 插插插亚洲综合网| 57pao国产精品一区| 亚洲国产另类 国产精品国产免费| 国产日本欧美视频| 亚洲香蕉av在线一区二区三区| 久久精品99久久久久久久久| 欧美日韩国产精品| 亚洲一区美女视频在线观看免费| 国产精品午夜国产小视频| 国产99视频精品免视看7| 亚洲精品日韩丝袜精品| 九九精品在线播放| 一本大道久久加勒比香蕉| 91精品久久久久久久久| 欧美又大又粗又长| 久久久久久久久久久亚洲| 国产亚洲精品久久久久久牛牛| 91po在线观看91精品国产性色| 91精品久久久久久久久久| 日本亚洲欧美三级| 国产婷婷97碰碰久久人人蜜臀| 91欧美精品成人综合在线观看| 北条麻妃在线一区二区| 亚洲国产成人爱av在线播放| 亚洲另类欧美自拍| 国产xxx69麻豆国语对白| 国产午夜精品一区理论片飘花| 97色伦亚洲国产| 国产精品视频大全| 国产精品ⅴa在线观看h| 色视频www在线播放国产成人| 亚洲天堂男人天堂女人天堂| 久久国产精品久久精品| 亚洲成年人影院在线| 亚洲成人精品视频在线观看| xxav国产精品美女主播| 精品色蜜蜜精品视频在线观看| 欧美另类在线播放| 日韩视频―中文字幕| 日韩高清av在线| 国产成人亚洲综合青青| 精品无人国产偷自产在线| 欧美色道久久88综合亚洲精品| 日韩激情av在线播放| 亚洲综合中文字幕在线| 精品欧美aⅴ在线网站| 欧美乱大交xxxxx另类电影| 一区二区三区视频免费| 亚洲国产天堂网精品网站| 亚洲视频axxx| 国产精品男人爽免费视频1| 国产精品成人一区二区| 日韩精品福利网站| 中文在线资源观看视频网站免费不卡| 日本欧美国产在线| 国产精品激情av在线播放| 日韩高清欧美高清| 亚洲欧美综合区自拍另类| 欧美一区第一页| 亚洲人成网站免费播放| 欧美贵妇videos办公室|