📄 jpgraph.php
字号:
$titlebackground_framestyle = 2, $titlebackground_frameweight = 1, $titlebackground_bevelheight = 3 ; var $titlebkg_fillstyle=TITLEBKG_FILLSTYLE_SOLID; var $titlebkg_scolor1='black',$titlebkg_scolor2='white'; var $framebevel = false, $framebeveldepth = 2 ; var $framebevelborder = false, $framebevelbordercolor='black'; var $framebevelcolor1='white@0.4', $framebevelcolor2='black@0.4'; var $background_image_mix=100; var $background_cflag = ''; var $background_cflag_type = BGIMG_FILLPLOT; var $background_cflag_mix = 100; var $iImgTrans=false, $iImgTransHorizon = 100,$iImgTransSkewDist=150, $iImgTransDirection = 1, $iImgTransMinSize = true, $iImgTransFillColor='white',$iImgTransHighQ=false, $iImgTransBorder=false,$iImgTransHorizonPos=0.5; var $iYAxisDeltaPos=50; var $iIconDepth=DEPTH_BACK; var $iAxisLblBgType = 0, $iXAxisLblBgFillColor = 'lightgray', $iXAxisLblBgColor = 'black', $iYAxisLblBgFillColor = 'lightgray', $iYAxisLblBgColor = 'black'; var $iTables=NULL;//---------------// CONSTRUCTOR // aWIdth Width in pixels of image // aHeight Height in pixels of image // aCachedName Name for image file in cache directory // aTimeOut Timeout in minutes for image in cache // aInline If true the image is streamed back in the call to Stroke() // If false the image is just created in the cache function Graph($aWidth=300,$aHeight=200,$aCachedName="",$aTimeOut=0,$aInline=true) { GLOBAL $gJpgBrandTiming; // If timing is used create a new timing object if( $gJpgBrandTiming ) { global $tim; $tim = new JpgTimer(); $tim->Push(); } if( !is_numeric($aWidth) || !is_numeric($aHeight) ) { JpGraphError::RaiseL(25008);//('Image width/height argument in Graph::Graph() must be numeric'); } // Automatically generate the image file name based on the name of the script that // generates the graph if( $aCachedName=="auto" ) $aCachedName=GenImgName(); // Should the image be streamed back to the browser or only to the cache? $this->inline=$aInline; $this->img = new RotImage($aWidth,$aHeight); $this->cache = new ImgStreamCache($this->img); $this->cache->SetTimeOut($aTimeOut); $this->title = new Text(); $this->title->ParagraphAlign('center'); $this->title->SetFont(FF_FONT2,FS_BOLD); $this->title->SetMargin(3); $this->title->SetAlign('center'); $this->subtitle = new Text(); $this->subtitle->ParagraphAlign('center'); $this->subtitle->SetMargin(2); $this->subtitle->SetAlign('center'); $this->subsubtitle = new Text(); $this->subsubtitle->ParagraphAlign('center'); $this->subsubtitle->SetMargin(2); $this->subsubtitle->SetAlign('center'); $this->legend = new Legend(); $this->footer = new Footer(); // Window doesn't like '?' in the file name so replace it with an '_' $aCachedName = str_replace("?","_",$aCachedName); // If the cached version exist just read it directly from the // cache, stream it back to browser and exit if( $aCachedName!="" && READ_CACHE && $aInline ) if( $this->cache->GetAndStream($aCachedName) ) { exit(); } $this->cache_name = $aCachedName; $this->SetTickDensity(); // Normal density $this->tabtitle = new GraphTabTitle(); }//---------------// PUBLIC METHODS // Enable final image perspective transformation function Set3DPerspective($aDir=1,$aHorizon=100,$aSkewDist=120,$aQuality=false,$aFillColor='#FFFFFF',$aBorder=false,$aMinSize=true,$aHorizonPos=0.5) { $this->iImgTrans = true; $this->iImgTransHorizon = $aHorizon; $this->iImgTransSkewDist= $aSkewDist; $this->iImgTransDirection = $aDir; $this->iImgTransMinSize = $aMinSize; $this->iImgTransFillColor=$aFillColor; $this->iImgTransHighQ=$aQuality; $this->iImgTransBorder=$aBorder; $this->iImgTransHorizonPos=$aHorizonPos; } // Set Image format and optional quality function SetImgFormat($aFormat,$aQuality=75) { $this->img->SetImgFormat($aFormat,$aQuality); } // Should the grid be in front or back of the plot? function SetGridDepth($aDepth) { $this->grid_depth=$aDepth; } function SetIconDepth($aDepth) { $this->iIconDepth=$aDepth; } // Specify graph angle 0-360 degrees. function SetAngle($aAngle) { $this->img->SetAngle($aAngle); } function SetAlphaBlending($aFlg=true) { $this->img->SetAlphaBlending($aFlg); } // Shortcut to image margin function SetMargin($lm,$rm,$tm,$bm) { $this->img->SetMargin($lm,$rm,$tm,$bm); } function SetY2OrderBack($aBack=true) { $this->y2orderback = $aBack; } // Rotate the graph 90 degrees and set the margin // when we have done a 90 degree rotation function Set90AndMargin($lm=0,$rm=0,$tm=0,$bm=0) { $lm = $lm ==0 ? floor(0.2 * $this->img->width) : $lm ; $rm = $rm ==0 ? floor(0.1 * $this->img->width) : $rm ; $tm = $tm ==0 ? floor(0.2 * $this->img->height) : $tm ; $bm = $bm ==0 ? floor(0.1 * $this->img->height) : $bm ; $adj = ($this->img->height - $this->img->width)/2; $this->img->SetMargin($tm-$adj,$bm-$adj,$rm+$adj,$lm+$adj); $this->img->SetCenter(floor($this->img->width/2),floor($this->img->height/2)); $this->SetAngle(90); if( empty($this->yaxis) || empty($this->xaxis) ) { JpgraphError::RaiseL(25009);//('You must specify what scale to use with a call to Graph::SetScale()'); } $this->xaxis->SetLabelAlign('right','center'); $this->yaxis->SetLabelAlign('center','bottom'); } function SetClipping($aFlg=true) { $this->iDoClipping = $aFlg ; } // Add a plot object to the graph function Add(&$aPlot) { if( $aPlot == null ) JpGraphError::RaiseL(25010);//("Graph::Add() You tried to add a null plot to the graph."); if( is_array($aPlot) && count($aPlot) > 0 ) $cl = $aPlot[0]; else $cl = $aPlot; if( is_a($cl,'Text') ) $this->AddText($aPlot); elseif( is_a($cl,'PlotLine') ) $this->AddLine($aPlot); elseif( is_a($cl,'PlotBand') ) $this->AddBand($aPlot); elseif( is_a($cl,'IconPlot') ) $this->AddIcon($aPlot); elseif( is_a($cl,'GTextTable') ) $this->AddTable($aPlot); else $this->plots[] = &$aPlot; } function AddTable(&$aTable) { if( is_array($aTable) ) { for($i=0; $i < count($aTable); ++$i ) $this->iTables[]=&$aTable[$i]; } else { $this->iTables[] = &$aTable ; } } function AddIcon(&$aIcon) { if( is_array($aIcon) ) { for($i=0; $i < count($aIcon); ++$i ) $this->iIcons[]=&$aIcon[$i]; } else { $this->iIcons[] = &$aIcon ; } } // Add plot to second Y-scale function AddY2(&$aPlot) { if( $aPlot == null ) JpGraphError::RaiseL(25011);//("Graph::AddY2() You tried to add a null plot to the graph."); if( is_array($aPlot) && count($aPlot) > 0 ) $cl = $aPlot[0]; else $cl = $aPlot; if( is_a($cl,'Text') ) $this->AddText($aPlot,true); elseif( is_a($cl,'PlotLine') ) $this->AddLine($aPlot,true); elseif( is_a($cl,'PlotBand') ) $this->AddBand($aPlot,true); else $this->y2plots[] = &$aPlot; } // Add plot to second Y-scale function AddY($aN,&$aPlot) { if( $aPlot == null ) JpGraphError::RaiseL(25012);//("Graph::AddYN() You tried to add a null plot to the graph."); if( is_array($aPlot) && count($aPlot) > 0 ) $cl = $aPlot[0]; else $cl = $aPlot; if( is_a($cl,'Text') || is_a($cl,'PlotLine') || is_a($cl,'PlotBand') ) JpGraph::RaiseL(25013);//('You can only add standard plots to multiple Y-axis'); else $this->ynplots[$aN][] = &$aPlot; } // Add text object to the graph function AddText(&$aTxt,$aToY2=false) { if( $aTxt == null ) JpGraphError::RaiseL(25014);//("Graph::AddText() You tried to add a null text to the graph."); if( $aToY2 ) { if( is_array($aTxt) ) { for($i=0; $i < count($aTxt); ++$i ) $this->y2texts[]=&$aTxt[$i]; } else $this->y2texts[] = &$aTxt; } else { if( is_array($aTxt) ) { for($i=0; $i < count($aTxt); ++$i ) $this->texts[]=&$aTxt[$i]; } else $this->texts[] = &$aTxt; } } // Add a line object (class PlotLine) to the graph function AddLine(&$aLine,$aToY2=false) { if( $aLine == null ) JpGraphError::RaiseL(25015);//("Graph::AddLine() You tried to add a null line to the graph."); if( $aToY2 ) { if( is_array($aLine) ) { for($i=0; $i < count($aLine); ++$i ) $this->y2lines[]=&$aLine[$i]; } else $this->y2lines[] = &$aLine; } else { if( is_array($aLine) ) { for($i=0; $i < count($aLine); ++$i ) $this->lines[]=&$aLine[$i]; } else $this->lines[] = &$aLine; } } // Add vertical or horizontal band function AddBand(&$aBand,$aToY2=false) { if( $aBand == null ) JpGraphError::RaiseL(25016);//(" Graph::AddBand() You tried to add a null band to the graph."); if( $aToY2 ) { if( is_array($aBand) ) { for($i=0; $i < count($aBand); ++$i ) $this->y2bands[] = &$aBand[$i]; } else $this->y2bands[] = &$aBand; } else { if( is_array($aBand) ) { for($i=0; $i < count($aBand); ++$i ) $this->bands[] = &$aBand[$i]; } else $this->bands[] = &$aBand; } } function SetBackgroundGradient($aFrom='navy',$aTo='silver',$aGradType=2,$aStyle=BGRAD_FRAME) { $this->bkg_gradtype=$aGradType; $this->bkg_gradstyle=$aStyle; $this->bkg_gradfrom = $aFrom; $this->bkg_gradto = $aTo; } // Set a country flag in the background function SetBackgroundCFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix=100) { $this->background_cflag = $aName; $this->background_cflag_type = $aBgType; $this->background_cflag_mix = $aMix; } // Alias for the above method function SetBackgroundCountryFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix=100) { $this->background_cflag = $aName; $this->background_cflag_type = $aBgType; $this->background_cflag_mix = $aMix; } // Specify a background image function SetBackgroundImage($aFileName,$aBgType=BGIMG_FILLPLOT,$aImgFormat="auto") { if( $GLOBALS['gd2'] && !USE_TRUECOLOR ) { JpGraphError::RaiseL(25017);//("You are using GD 2.x and are trying to use a background images on a non truecolor image. To use background images with GD 2.x you <b>must</b> enable truecolor by setting the USE_TRUECOLOR constant to TRUE. Due to a bug in GD 2.0.1 using any truetype fonts with truecolor images will result in very poor quality fonts."); } // Get extension to determine image type if( $aImgFormat == "auto" ) { $e = explode('.',$aFileName); if( !$e ) { JpGraphError::RaiseL(25018,$aFileName);//('Incorrect file name for Graph::SetBackgroundImage() : '.$aFileName.' Must have a valid image extension (jpg,gif,png) when using autodetection of image type'); } $valid_formats = array('png', 'jpg', 'gif'); $aImgFormat = strtolower($e[count($e)-1]); if ($aImgFormat == 'jpeg') { $aImgFormat = 'jpg'; } elseif (!in_array($aImgFormat, $valid_formats) ) { JpGraphError::RaiseL(25019,$aImgFormat);//('Unknown file extension ($aImgFormat) in Graph::SetBackgroundImage() for filename: '.$aFileName); } } $this->background_image = $aFileName; $this->background_image_type=$aBgType; $this->background_image_format=$aImgFormat; } function SetBackgroundImageMix($aMix) { $this->background_image_mix = $aMix ; } // Adjust brightness and constrast for background image function AdjBackgroundImage($aBright,$aContr=0,$aSat=0) { $this->background_image_bright=$aBright; $this->background_image_contr=$aContr; $this->background_image_sat=$aSat; } // Adjust brightness and constrast for image function AdjImage($aBright,$aContr=0,$aSat=0) { $this->image_bright=$aBright; $this->image_contr=$aContr; $this->image_sat=$aSat; } // Specify axis style (boxed or single) function SetAxisStyle($aStyle) { $this->iAxisStyle = $aStyle ; } // Set a frame around the plot area function SetBox($aDrawPlotFrame=true,$aPlotFrameColor=array(0,0,0),$aPlotFrameWeight=1) { $this->boxed = $aDrawPlotFrame; $this->box_weight = $aPlotFrameWeight; $this->box_color = $aPlotFrameColor; } // Specify color for the plotarea (not the margins) function SetColor($aColor) { $this->plotarea_color=$aColor; } // Specify color for the margins (all areas outside the plotarea) function SetMarginColor($aColor) { $this->margin_color=$aColor; } // Set a frame around the entire image function SetFrame($aDrawImgFrame=true,$aImgFrameColor=array(0,0,0),$aImgFrameWeight=1) { $this->doframe = $aDrawImgFrame; $this->frame_color = $aImgFrameColor; $this->frame_weight = $aImgFrameWeight; } function SetFrameBevel($aDepth=3,$aBorder=false,$aBorderColor='black',$aColor1='white@0.4',$aColor2='darkgray@0.4',$aFlg=true) { $this->framebevel = $aFlg ; $this->framebeveldepth = $aDepth ; $this->framebevelborder = $aBorder ; $this->framebevelbordercolor = $aBorderColor ; $this->framebevelcolor1 = $aColor1 ; $this->framebevelcolor2 = $aColor2 ; $this->doshadow = false ; } // Set the shadow around the whole image function SetShadow($aShowShadow=true,$aShadowWidth=5,$aShadowColor=array(102,102,102)) { $this->doshadow = $aShowShadow; $this->shadow_color = $aShadowColor; $this->shadow_width = $aShadowWidth;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -