小茹,我来支持你了----PHP GD BarClass

发表于:2007-05-25来源:作者:点击数: 标签:小茹我来你了----PHPBarClass
classBar { var$fileName;//数据文件 var$fontSize;//字体大小 var$imageBorderSpace;//图像边距 var$barFaceW;//柱条正面宽度 var$barSideW;//柱条侧面宽度 var$bgFaceColor;//背景正面颜色 var$bgSideColor;//背景侧面颜色 var$bgFloodColor;//背景底面颜

class Bar
{
var $fileName;//数据文件
var $fontSize;//字体大小
var $imageBorderSpace;//图像边距
var $barFaceW;//柱条正面宽度
var $barSideW;//柱条侧面宽度
var $bgFaceColor;//背景正面颜色
var $bgSideColor;//背景侧面颜色
var $bgFloodColor;//背景底面颜色
var $barFaceColor;//柱条正面颜色
var $barSideColor;//柱条侧面颜色
var $barTopColor;//柱条顶面颜色
var $labelFontColor;           //X,Y轴标签字体颜色
var $barFontColor;//柱条上标注字体颜色
var $imageColor;//图像背景颜色
var $borderColor;//边线,刻度线颜色
var $image;//image handle
var $barFontPos;//柱条上文字位置(top:顶端;middle:中部;bottom:底部)
var $barFontWay;//柱条上文字方向(up:竖写;down:横写)
var $xPointCount;//X轴坐标数目
var $xLabelArray;//X轴标签
var $dataArray;//柱条上文字
var $angle;//X,Y轴夹角
var $lineCount;//刻度线数量
var $lineH;//刻度线间距
var $imageType;//输出图片格式:gif,jpeg,png

//-------------------------------------
//构造函数
//-------------------------------------
function Bar()
{
$this->fileName = "3dbar.dat";
$this->fontSize = 5;
$this->imageBorderSpace = 5;
$this->barFaceW = 10;
$this->barSideW = 10;
$this->bgFaceColor = "#9999FF";
$this->bgSideColor = "#ACACFF";
$this->bgFloodColor = "#ECECFF";
$this->barFaceColor = "#FFCCCC";
$this->barSideColor = "#FF9999";
$this->barTopColor = "#FFE8E8";
$this->labelFontColor = "#330099";
$this->barFontColor = "#000000";
$this->imageColor = "#FFFFFF";
$this->borderColor = "#CCCCFF";
$this->barFontPos = "top";
$this->barFontWay = "down";
$this->angle = 45;
$this->lineCount = 10;
$this->lineH = 20;
$this->imageType = "png";
}

//-------------------------------------
//设定数据文件名
//-------------------------------------
function setFileName($name)
{
$this->fileName = $name;
}

//-------------------------------------
//设定字体大小
//-------------------------------------
function setFontSize($size)
{
$this->fontSize = $size;
}

//-------------------------------------
//设定图像边距
//-------------------------------------
function setImageBorderSpace($space)
{
$this->imageBorderSpace = $space;
}

//-------------------------------------
//设定柱条正面宽度
//-------------------------------------
function setBarFaceW($width)
{
$this->barFaceW = $width;
}

//-------------------------------------
//设定柱条侧面宽度
//-------------------------------------
function setBarSideW($width)
{
$this->barSideW = $width;
}

//-------------------------------------
//取得原始数据
//-------------------------------------
function setDataArray()
{
$file = file($this->fileName);
$this->xPointCount = count($file);

for($i = 0; $i < $this->xPointCount; $i++)
{
$line = explode("||",$file[$i]);
$this->xLabelArray[$i] = $line[0];
$this->dataArray[$i] = (int)$line[1];
}
}

//-------------------------------------
//取得原始数据中最大数据
//-------------------------------------
function getMaxData()
{
$maxValue = (int)$this->dataArray[0];
for($i = 1; $i < count($this->dataArray); $i++)
{
if($maxValue < (int)$this->dataArray[$i])
{
$maxValue = (int)$this->dataArray[$i];
}
}

return $maxValue;
}

//-------------------------------------
//将16进制颜色值转换成RGB,返回imageColorAllocate值
//-------------------------------------
function getImageColorAllocate($colorStr)
{
$firstChar = subStr($colorStr,0,1);

if($firstChar == "#"
{
$startPos = 1;
}
else
{
$startPos = 0;
}

$R = HexDec(subStr($colorStr,$startPos,2));
$G = HexDec(subStr($colorStr,$startPos+2,2));
$B = HexDec(subStr($colorStr,$startPos+4,2));

return imageColorAllocate($this->image,$R,$G,$B);
}

//-------------------------------------
//设定正面背景颜色
//-------------------------------------
function setBgFaceColor($colorStr)
{
$this->bgFaceColor = $colorStr;
}

//-------------------------------------
//取得正面背景颜色
//-------------------------------------
function getBgFaceColor()
{
return $this->getImageColorAllocate($this->bgFaceColor);
}

//-------------------------------------
//设定侧面背景颜色
//-------------------------------------
function setBgSideColor($colorStr)
{
$this->bgSideColor = $colorStr;
}

//-------------------------------------
//取得侧面背景颜色
//-------------------------------------
function getBgSideColor()
{
return $this->getImageColorAllocate($this->bgSideColor);
}

//-------------------------------------
//设定底面背景颜色
//-------------------------------------
function setBgFloodColor($colorStr)
{
$this->bgFloodColor = $colorStr;
}

//-------------------------------------
//取得底面背景颜色
//-------------------------------------
function getBgFloodColor()
{
return $this->getImageColorAllocate($this->bgFloodColor);
}

//-------------------------------------
//设定柱条正面颜色
//-------------------------------------
function setBarFaceColor($colorStr)
{
$this->barFaceColor = $colorStr;
}

//-------------------------------------
//取得柱条正面颜色
//-------------------------------------
function getBarFaceColor()
{
return $this->getImageColorAllocate($this->barFaceColor);
}

//-------------------------------------
//设定柱条侧面颜色
//-------------------------------------
function setBarSideColor($colorStr)
{
$this->barSideColor = $colorStr;
}

//-------------------------------------
//取得柱条侧面颜色
//-------------------------------------
function getBarSideColor()
{
return $this->getImageColorAllocate($this->barSideColor);
}

//-------------------------------------
//设定柱条顶面颜色
//-------------------------------------
function setBarTopColor($colorStr)
{
$this->barTopColor = $colorStr;
}

//-------------------------------------
//取得柱条顶面颜色
//-------------------------------------
function getBarTopColor()
{
return $this->getImageColorAllocate($this->barTopColor);
}

//-------------------------------------
//设定X,Y轴标签字体颜色
//-------------------------------------
function setLabelFontColor($colorStr)
{
$this->labelFontColor = $colorStr;
}

//-------------------------------------
//取得X,Y轴标签字体颜色
//-------------------------------------
function getLabelFontColor()
{
return $this->getImageColorAllocate($this->labelFontColor);
}

//-------------------------------------
//设定柱条字体颜色
//-------------------------------------
function setBarFontColor($colorStr)
{
$this->barFontColor = $colorStr;
}

//-------------------------------------
//取得柱条字体颜色
//-------------------------------------
function getBarFontColor()
{
return $this->getImageColorAllocate($this->barFontColor);
}

//-------------------------------------
//设定图像背景颜色
//-------------------------------------
function setImageColor($colorStr)
{
$this->imageColor = $colorStr;
}

//-------------------------------------
//取得图像背景颜色
//-------------------------------------
function getImageColor()
{
return $this->getImageColorAllocate($this->imageColor);
}

//-------------------------------------
//设定刻度线颜色
//-------------------------------------
function setBorderColor($colorStr)
{
$this->borderColor = $colorStr;
}

//-------------------------------------
//取得刻度线颜色
//-------------------------------------
function getBorderColor()
{
return $this->getImageColorAllocate($this->borderColor);
}

//-------------------------------------
//设定X,Y夹角
//-------------------------------------
function setAngle($angle)
{
$this->angle = $angle;
}

//-------------------------------------
//设定刻度线数量
//-------------------------------------
function setLineCount($num)
{
$this->lineCount = $num;
}

//-------------------------------------
//设定刻度线间距
//-------------------------------------
function setLineH($height)
{
$this->lineH = $height;
}

//-------------------------------------
//设定输出图片格式
//-------------------------------------
function setImageType($ext)
{
$this->imageType = $ext;
}

//-------------------------------------
//角度转换成弧度
//-------------------------------------
function deg2rad($angle)
{
return $angle * (pi() / 180);
}

//-------------------------------------
//画图形
//-------------------------------------
function draw()
{
$this->setDataArray();

//计算Y轴标签宽度
$fontW = imageFontWidth($this->fontSize);
$labelMaxW = strLen($this->getMaxData()) * $fontW;

//间距
$space = $this->imageBorderSpace;

//图布
$bgSideW = ($this->barSideW + $space) * cos($this->deg2rad($this->angle));
$bgFaceW = $this->barFaceW + $this->barFaceW * 3 * $this->xPointCount + $this->barFaceW;
$imageW = $space + $labelMaxW + $space + $bgSideW + $bgFaceW + $space;
$bgFaceH = $space + $this->lineH * $this->lineCount;
$bgFloodH = ($this->barSideW + $space) * sin($this->deg2rad($this->angle));
$imageH = $space + $bgFaceH + $bgFloodH + $space + imageFontHeight($this->fontSize) + $space;
$this->image = imageCreate($imageW,$imageH);
imageFill($this->image,0,0,$this->getImageColor());

//背景正面
$pointArray1[0] = $space + $labelMaxW + $space + $bgSideW;
$pointArray1[1] = $space;
$pointArray1[2] = $pointArray1[0];
$pointArray1[3] = $pointArray1[1] + $bgFaceH;
$pointArray1[4] = $pointArray1[2] + $bgFaceW;
$pointArray1[5] = $pointArray1[3];
$pointArray1[6] = $pointArray1[4];
$pointArray1[7] = $pointArray1[1];
imageFilledPolygon($this->image,$pointArray1,4,$this->getBgFaceColor());

//背景侧面
$pointArray2[0] = $pointArray1[0];
$pointArray2[1] = $pointArray1[1];
$pointArray2[2] = $pointArray2[0] - $bgSideW;
$pointArray2[3] = $pointArray2[1] + tan($this->deg2rad($this->angle)) * $bgSideW;
$pointArray2[4] = $pointArray2[2];
$pointArray2[5] = $pointArray2[3] + $bgFaceH;
$pointArray2[6] = $pointArray2[0];
$pointArray2[7] = $pointArray2[1] + $bgFaceH;
imageFilledPolygon($this->image,$pointArray2,4,$this->getBgSideColor());

//背景底面
$pointArray3[0] = $pointArray2[6];
$pointArray3[1] = $pointArray2[7];
$pointArray3[2] = $pointArray3[0] - $bgSideW;
$pointArray3[3] = $pointArray3[1] + $bgFloodH;
$pointArray3[4] = $pointArray3[2] + $bgFaceW;
$pointArray3[5] = $pointArray3[3];
$pointArray3[6] = $pointArray3[0] + $bgFaceW;
$pointArray3[7] = $pointArray3[1];
imageFilledPolygon($this->image,$pointArray3,4,$this->getBgFloodColor());

//刻度线,一共 lineCount-1 条
for($i = 1; $i < $this->lineCount; $i++)
{
imageLine($this->image,$pointArray1[0],$space * 2 + $this->lineH * $i,$pointArray1[6],$space * 2 + $this->lineH * $i,$this->getBorderColor());
}

//Y轴标签
$stepValue = round($this->getMaxData() / $this->lineCount);

for($i = 0; $i < $this->lineCount; $i++)
{
$labelValue = $i * $stepValue;
imageString($this->image,$this->fontSize,$space,$pointArray3[1] - $i * $this->lineH - imageFontHeight($this->fontSize) / 2,$labelValue,$this->getLabelFontColor());
}

//X轴标签
for($i = 0; $i < $this->xPointCount; $i++)
{
imageString($this->image,$this->fontSize,$pointArray3[0] + $this->barFaceW + $space + $this->barFaceW * 3 * $i,$pointArray3[3] + $space,$i+1,$this->getLabelFontColor());
}

//画柱条
for($i = 0; $i < $this->xPointCount; $i++)
{
if($this->dataArray[$i] != 0)
{
$barH = $this->dataArray[$i] * ($this->lineH / $stepValue);

//正面
$pointArray4[0] = $pointArray3[0] + $this->barFaceW * 2 + $this->barFaceW * 3 * $i - $this->barSideW * cos($this->deg2rad($this->angle));
$pointArray4[1] = $pointArray3[1] + $this->barSideW * sin($this->deg2rad($this->angle));
$pointArray4[2] = $pointArray4[0] + $this->barFaceW;
$pointArray4[3] = $pointArray4[1];
$pointArray4[4] = $pointArray4[2];
$pointArray4[5] = $pointArray4[3] - $barH;
$pointArray4[6] = $pointArray4[0];
$pointArray4[7] = $pointArray4[5];
imageFilledPolygon($this->image,$pointArray4,4,$this->getBarFaceColor());

//侧面
$pointArray5[0] = $pointArray4[2];
$pointArray5[1] = $pointArray4[3];
$pointArray5[2] = $pointArray3[0]  + $this->barFaceW * 3 * ($i + 1);
$pointArray5[3] = $pointArray3[1];
$pointArray5[4] = $pointArray5[2];
$pointArray5[5] = $pointArray5[3] - $barH;
$pointArray5[6] = $pointArray5[0];
$pointArray5[7] = $pointArray5[1] - $barH;
imageFilledPolygon($this->image,$pointArray5,4,$this->getBarSideColor());

//顶面
$pointArray6[0] = $pointArray4[0];
$pointArray6[1] = $pointArray5[7];
$pointArray6[2] = $pointArray4[2];
$pointArray6[3] = $pointArray6[1];
$pointArray6[4] = $pointArray5[2];
$pointArray6[5] = $pointArray5[5];
$pointArray6[6] = $pointArray6[4] - $this->barFaceW;
$pointArray6[7] = $pointArray6[5];
imageFilledPolygon($this->image,$pointArray6,4,$this->getBarTopColor());

//条柱标注文字
if($this->barFontPos == "top"
{
$barFontY = $pointArray6[1] - imageFontHeight($this->fontSize);
}
else if($this->barFontPos == "middle"
{
$barFontY = $pointArray6[1] + $barH / 2 - imageFontHeight($this->fontSize);
}
else if($this->barFontPos == "bottom"
{
$barFontY = $pointArray4[1];
}

if($this->barFontWay == "down"
{
imageString($this->image,$this->fontSize,$pointArray4[0],$barFontY,$this->dataArray[$i],$this->getBarFontColor());
}
else if($this->barFontWay == "up"
{
imageStringUp($this->image,$this->fontSize,$pointArray4[0],$barFontY,$this->dataArray[$i],$this->getBarFontColor());
}
}
}

//输出图片
if($this->imageType == "gif"
{
//Header("Content-type: image/gif";
imageGif($this->image);
}
else if($this->imageType == "jpeg"
{
//Header("Content-type: image/jpeg";
imageJpeg($this->image);
}
else if($this->imageType == "png"
{
//Header("Content-type: image/gif";
imagePng($this->image,$this->fileName.".png";
}

imageDestroy($this->image);
}
}
?>

 henry 回复于:2001-11-24 21:46:48
怎么不给出一个例子?这样大家才能看清楚嘛。

 ihweb 回复于:2002-10-12 17:20:02
[quote][b]下面引用由[u]henry[/u]在 [i]2001/11/24 09:46pm[/i] 发表的内容:[/b]
怎么不给出一个例子?这样大家才能看清楚嘛。
[/quote]
TT

 3rd 回复于:2002-10-23 14:45:00
JPgraph不知道出到什么版本了,用来做图很好用,看看吧。

 wsjakey 回复于:2003-11-20 14:02:16
<?php
class Bar
{
var $fileName;//数据文件
var $fontSize;//字体大小
var $imageBorderSpace;//图像边距
var $barFaceW;//柱条正面宽度
var $barSideW;//柱条侧面宽度
var $bgFaceColor;//背景正面颜色
var $bgSideColor;//背景侧面颜色
var $bgFloodColor;//背景底面颜色
var $barFaceColor;//柱条正面颜色
var $barSideColor;//柱条侧面颜色
var $barTopColor;//柱条顶面颜色
var $labelFontColor;           //X,Y轴标签字体颜色
var $barFontColor;//柱条上标注字体颜色
var $imageColor;//图像背景颜色
var $borderColor;//边线,刻度线颜色
var $image;//image handle
var $barFontPos;//柱条上文字位置(top:顶端;middle:中部;bottom:底部)
var $barFontWay;//柱条上文字方向(up:竖写;down:横写)
var $xPointCount;//X轴坐标数目
var $xLabelArray;//X轴标签
var $dataArray;//柱条上文字
var $angle;//X,Y轴夹角
var $lineCount;//刻度线数量
var $lineH;//刻度线间距
var $imageType;//输出图片格式:gif,jpeg,png

//-------------------------------------
//构造函数
//-------------------------------------
function Bar()
{
$this->fileName = "3dbar.dat";
$this->fontSize = 5;
$this->imageBorderSpace = 5;
$this->barFaceW = 10;
$this->barSideW = 10;
$this->bgFaceColor = "#9999FF";
$this->bgSideColor = "#ACACFF";
$this->bgFloodColor = "#ECECFF";
$this->barFaceColor = "#FFCCCC";
$this->barSideColor = "#FF9999";
$this->barTopColor = "#FFE8E8";
$this->labelFontColor = "#330099";
$this->barFontColor = "#000000";
$this->imageColor = "#FFFFFF";
$this->borderColor = "#CCCCFF";
$this->barFontPos = "top";
$this->barFontWay = "down";
$this->angle = 45;
$this->lineCount = 10;
$this->lineH = 20;
$this->imageType = "png";
}

//-------------------------------------
//设定数据文件名
//-------------------------------------
function setFileName($name)
{
$this->fileName = $name;
}

//-------------------------------------
//设定字体大小
//-------------------------------------
function setFontSize($size)
{
$this->fontSize = $size;
}

//-------------------------------------
//设定图像边距
//-------------------------------------
function setImageBorderSpace($space)
{
$this->imageBorderSpace = $space;
}

//-------------------------------------
//设定柱条正面宽度
//-------------------------------------
function setBarFaceW($width)
{
$this->barFaceW = $width;
}

//-------------------------------------
//设定柱条侧面宽度
//-------------------------------------
function setBarSideW($width)
{
$this->barSideW = $width;
}

//-------------------------------------
//取得原始数据
//-------------------------------------
function setDataArray($xLabelArray, $dataArray, $xPointCount)
{
 /*
$file = file($this->fileName);
$this->xPointCount = count($file);

for($i = 0; $i < $this->xPointCount; $i++)
{
$line = explode("||",$file[$i]);
$this->xLabelArray[$i] = $line[0];
$this->dataArray[$i] = (int)$line[1];
}
*/
//add by wsjakey 11-20
$this->xLabelArray = $xLabelArray;
$this->dataArray   = $dataArray;
$this->xPointCount = $xPointCount;]
//end by wsjakey 11-20
}

//-------------------------------------
//取得原始数据中最大数据
//-------------------------------------
function getMaxData()
{
$maxValue = (int)$this->dataArray[0];
for($i = 1; $i < count($this->dataArray); $i++)
{
if($maxValue < (int)$this->dataArray[$i])
{
$maxValue = (int)$this->dataArray[$i];
}
    }

return $maxValue;
}

//-------------------------------------
//将16进制颜色值转换成RGB,返回imageColorAllocate值
//-------------------------------------
function getImageColorAllocate($colorStr)
{
$firstChar = subStr($colorStr,0,1);

if($firstChar == "#")
{
$startPos = 1;
}
else
{
$startPos = 0;
}

$R = HexDec(subStr($colorStr,$startPos,2));
$G = HexDec(subStr($colorStr,$startPos+2,2));
$B = HexDec(subStr($colorStr,$startPos+4,2));

return imageColorAllocate($this->image,$R,$G,$B);
}

//-------------------------------------
//设定正面背景颜色
//-------------------------------------
function setBgFaceColor($colorStr)
{
$this->bgFaceColor = $colorStr;
}

//-------------------------------------
//取得正面背景颜色
//-------------------------------------
function getBgFaceColor()
{
return $this->getImageColorAllocate($this->bgFaceColor);
}

//-------------------------------------
//设定侧面背景颜色
//-------------------------------------
function setBgSideColor($colorStr)
{
$this->bgSideColor = $colorStr;
}

//-------------------------------------
//取得侧面背景颜色
//-------------------------------------
function getBgSideColor()
{
return $this->getImageColorAllocate($this->bgSideColor);
}

//-------------------------------------
//设定底面背景颜色
//-------------------------------------
function setBgFloodColor($colorStr)
{
$this->bgFloodColor = $colorStr;
}

//-------------------------------------
//取得底面背景颜色
//-------------------------------------
function getBgFloodColor()
{
return $this->getImageColorAllocate($this->bgFloodColor);
}

//-------------------------------------
//设定柱条正面颜色
//-------------------------------------
function setBarFaceColor($colorStr)
{
$this->barFaceColor = $colorStr;
}

//-------------------------------------
//取得柱条正面颜色
//-------------------------------------
function getBarFaceColor()
{
return $this->getImageColorAllocate($this->barFaceColor);
}

//-------------------------------------
//设定柱条侧面颜色
//-------------------------------------
function setBarSideColor($colorStr)
{
$this->barSideColor = $colorStr;
}

//-------------------------------------
//取得柱条侧面颜色
//-------------------------------------
function getBarSideColor()
{
return $this->getImageColorAllocate($this->barSideColor);
}

//-------------------------------------
//设定柱条顶面颜色
//-------------------------------------
function setBarTopColor($colorStr)
{
$this->barTopColor = $colorStr;
}

//-------------------------------------
//取得柱条顶面颜色
//-------------------------------------
function getBarTopColor()
{
return $this->getImageColorAllocate($this->barTopColor);
}

//-------------------------------------
//设定X,Y轴标签字体颜色
//-------------------------------------
function setLabelFontColor($colorStr)
{
$this->labelFontColor = $colorStr;
}

//-------------------------------------
//取得X,Y轴标签字体颜色
//-------------------------------------
function getLabelFontColor()
{
return $this->getImageColorAllocate($this->labelFontColor);
}

//-------------------------------------
//设定柱条字体颜色
//-------------------------------------
function setBarFontColor($colorStr)
{
$this->barFontColor = $colorStr;
}

//-------------------------------------
//取得柱条字体颜色
//-------------------------------------
function getBarFontColor()
{
return $this->getImageColorAllocate($this->barFontColor);
}

//-------------------------------------
//设定图像背景颜色
//-------------------------------------
function setImageColor($colorStr)
{
$this->imageColor = $colorStr;
}

//-------------------------------------
//取得图像背景颜色
//-------------------------------------
function getImageColor()
{
return $this->getImageColorAllocate($this->imageColor);
}

//-------------------------------------
//设定刻度线颜色
//-------------------------------------
function setBorderColor($colorStr)
{
$this->borderColor = $colorStr;
}

//-------------------------------------
//取得刻度线颜色
//-------------------------------------
function getBorderColor()
{
return $this->getImageColorAllocate($this->borderColor);
}

//-------------------------------------
//设定X,Y夹角
//-------------------------------------
function setAngle($angle)
{
$this->angle = $angle;
}

//-------------------------------------
//设定刻度线数量
//-------------------------------------
function setLineCount($num)
{
$this->lineCount = $num;
}

//-------------------------------------
//设定刻度线间距
//-------------------------------------
function setLineH($height)
{
$this->lineH = $height;
}

//-------------------------------------
//设定输出图片格式
//-------------------------------------
function setImageType($ext)
{
$this->imageType = $ext;
}

//-------------------------------------
//角度转换成弧度
//-------------------------------------
function deg2rad($angle)
{
return $angle * (pi() / 180);
}

//-------------------------------------
//画图形
//-------------------------------------
function draw()
{
  //edit by wsjakey 11-20
//$this->setDataArray();
//end edit by wsjakey 11-20

//计算Y轴标签宽度
$fontW = imageFontWidth($this->fontSize);
$labelMaxW = strLen($this->getMaxData()) * $fontW;

//间距
$space = $this->imageBorderSpace;

//图布
$bgSideW = ($this->barSideW + $space) * cos($this->deg2rad($this->angle));
$bgFaceW = $this->barFaceW + $this->barFaceW * 3 * $this->xPointCount + $this->barFaceW;
$imageW = $space + $labelMaxW + $space + $bgSideW + $bgFaceW + $space;
$bgFaceH = $space + $this->lineH * $this->lineCount;
$bgFloodH = ($this->barSideW + $space) * sin($this->deg2rad($this->angle));
$imageH = $space + $bgFaceH + $bgFloodH + $space + imageFontHeight($this->fontSize) + $space;
$this->image = imageCreate($imageW,$imageH);
imageFill($this->image,0,0,$this->getImageColor());

//背景正面
$pointArray1[0] = $space + $labelMaxW + $space + $bgSideW;
$pointArray1[1] = $space;
$pointArray1[2] = $pointArray1[0];
$pointArray1[3] = $pointArray1[1] + $bgFaceH;
$pointArray1[4] = $pointArray1[2] + $bgFaceW;
$pointArray1[5] = $pointArray1[3];
$pointArray1[6] = $pointArray1[4];
$pointArray1[7] = $pointArray1[1];
imageFilledPolygon($this->image,$pointArray1,4,$this->getBgFaceColor());

//背景侧面
$pointArray2[0] = $pointArray1[0];
$pointArray2[1] = $pointArray1[1];
$pointArray2[2] = $pointArray2[0] - $bgSideW;
$pointArray2[3] = $pointArray2[1] + tan($this->deg2rad($this->angle)) * $bgSideW;
$pointArray2[4] = $pointArray2[2];
$pointArray2[5] = $pointArray2[3] + $bgFaceH;
$pointArray2[6] = $pointArray2[0];
$pointArray2[7] = $pointArray2[1] + $bgFaceH;
imageFilledPolygon($this->image,$pointArray2,4,$this->getBgSideColor());

//背景底面
$pointArray3[0] = $pointArray2[6];
$pointArray3[1] = $pointArray2[7];
$pointArray3[2] = $pointArray3[0] - $bgSideW;
$pointArray3[3] = $pointArray3[1] + $bgFloodH;
$pointArray3[4] = $pointArray3[2] + $bgFaceW;
$pointArray3[5] = $pointArray3[3];
$pointArray3[6] = $pointArray3[0] + $bgFaceW;
$pointArray3[7] = $pointArray3[1];
imageFilledPolygon($this->image,$pointArray3,4,$this->getBgFloodColor());

//刻度线,一共 lineCount-1 条
for($i = 1; $i < $this->lineCount; $i++)
{
imageLine($this->image,$pointArray1[0],$space * 2 + $this->lineH * $i,$pointArray1[6],$space * 2 + $this->lineH * $i,$this->getBorderColor());
}

//Y轴标签
$stepValue = round($this->getMaxData() / $this->lineCount);

for($i = 0; $i < $this->lineCount; $i++)
{
$labelValue = $i * $stepValue;
imageString($this->image,$this->fontSize,$space,$pointArray3[1] - $i * $this->lineH - imageFontHeight($this->fontSize) / 2,$labelValue,$this->getLabelFontColor());
}

//X轴标签
for($i = 0; $i < $this->xPointCount; $i++)
{
imageString($this->image,$this->fontSize,$pointArray3[0] + $this->barFaceW + $space + $this->barFaceW * 3 * $i,$pointArray3[3] + $space,$i+1,$this->getLabelFontColor());
}

//画柱条
for($i = 0; $i < $this->xPointCount; $i++)
{
if($this->dataArray[$i] != 0)
{
$barH = $this->dataArray[$i] * ($this->lineH / $stepValue);

//正面
$pointArray4[0] = $pointArray3[0] + $this->barFaceW * 2 + $this->barFaceW * 3 * $i - $this->barSideW * cos($this->deg2rad($this->angle));
$pointArray4[1] = $pointArray3[1] + $this->barSideW * sin($this->deg2rad($this->angle));
$pointArray4[2] = $pointArray4[0] + $this->barFaceW;
$pointArray4[3] = $pointArray4[1];
$pointArray4[4] = $pointArray4[2];
$pointArray4[5] = $pointArray4[3] - $barH;
$pointArray4[6] = $pointArray4[0];
$pointArray4[7] = $pointArray4[5];
imageFilledPolygon($this->image,$pointArray4,4,$this->getBarFaceColor());

//侧面
$pointArray5[0] = $pointArray4[2];
$pointArray5[1] = $pointArray4[3];
$pointArray5[2] = $pointArray3[0]  + $this->barFaceW * 3 * ($i + 1);
$pointArray5[3] = $pointArray3[1];
$pointArray5[4] = $pointArray5[2];
$pointArray5[5] = $pointArray5[3] - $barH;
$pointArray5[6] = $pointArray5[0];
$pointArray5[7] = $pointArray5[1] - $barH;
imageFilledPolygon($this->image,$pointArray5,4,$this->getBarSideColor());

//顶面
$pointArray6[0] = $pointArray4[0];
$pointArray6[1] = $pointArray5[7];
$pointArray6[2] = $pointArray4[2];
$pointArray6[3] = $pointArray6[1];
$pointArray6[4] = $pointArray5[2];
$pointArray6[5] = $pointArray5[5];
$pointArray6[6] = $pointArray6[4] - $this->barFaceW;
$pointArray6[7] = $pointArray6[5];
imageFilledPolygon($this->image,$pointArray6,4,$this->getBarTopColor());

//条柱标注文字
if($this->barFontPos == "top")
{
$barFontY = $pointArray6[1] - imageFontHeight($this->fontSize);
}
else if($this->barFontPos == "middle")
{
$barFontY = $pointArray6[1] + $barH / 2 - imageFontHeight($this->fontSize);
}
else if($this->barFontPos == "bottom")
{
$barFontY = $pointArray4[1];
}

if($this->barFontWay == "down")
{
imageString($this->image,$this->fontSize,$pointArray4[0],$barFontY,$this->dataArray[$i],$this->getBarFontColor());
}
else if($this->barFontWay == "up")
{
imageStringUp($this->image,$this->fontSize,$pointArray4[0],$barFontY,$this->dataArray[$i],$this->getBarFontColor());
}
}
}

//输出图片
if($this->imageType == "gif")
{
Header("Content-type: image/gif");
imageGif($this->image);
}
else if($this->imageType == "jpeg")
{
Header("Content-type: image/jpeg");
imageJpeg($this->image);
}
else if($this->imageType == "png")
{
Header("Content-type: image/gif");
//imagePng($this->image,$this->fileName.".png");
imagePng($this->image);
}

imageDestroy($this->image);
}
 }
 
 //add by wsjakey 11-20
 //example
 $bar = new Bar();
 $str = "10:4:8:2:9:6:20";
 $dataArray = explode(":", $str);
 
 $xLabelArray = explode(":", $str);
 $xPointCount = sizeof($dataArray);
  
 $bar->setDataArray($xLabelArray, $dataArray, $xPointCount);
 $bar->draw();
 //end by wsjakey 11-20
?> 
楼上写的非常好,您没有给出例子来,我看了一下,发现您是从文件里取出的数据,所以我试着改了一下,并且给出一个小例子来,希望您不要介意哟!

 wsjakey 回复于:2003-11-20 14:04:16
JPgraph这个库的功能很强大,我下载了一下看了看,不错的哟!可以下载学习一下,用于商业开发是要收费的!

原文转自:http://www.ltesting.net