免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3590 | 回复: 5
打印 上一主题 下一主题

小茹,我来支持你了----PHP GD BarClass [复制链接]

bigmouse 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2001-11-24 11:03 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2001-11-24 21:46 |只看该作者

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

怎么不给出一个例子?这样大家才能看清楚嘛。

论坛徽章:
0
3 [报告]
发表于 2002-10-12 17:20 |只看该作者

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

下面引用由henry2001/11/24 09:46pm 发表的内容:
怎么不给出一个例子?这样大家才能看清楚嘛。
TT

论坛徽章:
0
4 [报告]
发表于 2002-10-23 14:45 |只看该作者

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

JPgraph不知道出到什么版本了,用来做图很好用,看看吧。

论坛徽章:
0
5 [报告]
发表于 2003-11-20 14:02 |只看该作者

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

<?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
?>;
楼上写的非常好,您没有给出例子来,我看了一下,发现您是从文件里取出的数据,所以我试着改了一下,并且给出一个小例子来,希望您不要介意哟!

论坛徽章:
0
6 [报告]
发表于 2003-11-20 14:04 |只看该作者

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

JPgraph这个库的功能很强大,我下载了一下看了看,不错的哟!可以下载学习一下,用于商业开发是要收费的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP