Changeset 265 for trunk/client/modules/Elezioni/grafici/jpgraph_mgraph.php
- Timestamp:
- Apr 13, 2019, 8:05:15 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/client/modules/Elezioni/grafici/jpgraph_mgraph.php
r2 r265 1 1 <?php 2 2 /*======================================================================= 3 // File:JPGRAPH_MGRAPH.PHP4 // Description: Class to handle multiple graphs in the same image5 // Created:2006-01-156 // Ver: $Id: jpgraph_mgraph.php 1012 2008-06-23 15:02:15Z ljp $7 //8 // Copyright (c) Aditus Consulting. All rights reserved.9 //========================================================================10 */3 // File: JPGRAPH_MGRAPH.PHP 4 // Description: Class to handle multiple graphs in the same image 5 // Created: 2006-01-15 6 // Ver: $Id: jpgraph_mgraph.php 1770 2009-08-17 06:10:22Z ljp $ 7 // 8 // Copyright (c) Asial Corporation. All rights reserved. 9 //======================================================================== 10 */ 11 11 12 12 //============================================================================= 13 13 // CLASS MGraph 14 // Description: Create a container image that can hold several graph 14 // Description: Create a container image that can hold several graph 15 15 //============================================================================= 16 16 class MGraph { 17 18 public $title = null, $subtitle = null, $subsubtitle = null; 17 19 18 20 protected $img=NULL; 19 21 protected $iCnt=0,$iGraphs = array(); // image_handle, x, y, fx, fy, sizex, sizey 20 22 protected $iFillColor='white', $iCurrentColor=0; 21 protected $lm= 0,$rm=0,$tm=0,$bm=0;23 protected $lm=4,$rm=4,$tm=4,$bm=4; 22 24 protected $iDoFrame = FALSE, $iFrameColor = 'black', $iFrameWeight = 1; 23 25 protected $iLineWeight = 1; 24 26 protected $expired=false; 25 protected $img_format='png',$image_quality=75; 27 protected $cache=null,$cache_name = '',$inline=true; 28 protected $image_format='png',$image_quality=75; 26 29 protected $iWidth=NULL,$iHeight=NULL; 27 30 protected $background_image='',$background_image_center=true, 28 $backround_image_format='',$background_image_mix=100, 29 $background_image_y=NULL, $background_image_x=NULL; 31 $backround_image_format='',$background_image_mix=100, 32 $background_image_y=NULL, $background_image_x=NULL; 33 private $doshadow=false, $shadow_width=4, $shadow_color='gray@0.5'; 34 public $footer; 35 30 36 31 37 // Create a new instane of the combined graph 32 function MGraph($aWidth=NULL,$aHeight=NULL) { 33 $this->iWidth = $aWidth; 34 $this->iHeight = $aHeight; 38 function __construct($aWidth=NULL,$aHeight=NULL,$aCachedName='',$aTimeOut=0,$aInline=true) { 39 $this->iWidth = $aWidth; 40 $this->iHeight = $aHeight; 41 42 // If the cached version exist just read it directly from the 43 // cache, stream it back to browser and exit 44 if( $aCachedName!='' && READ_CACHE && $aInline ) { 45 $this->cache = new ImgStreamCache(); 46 $this->cache->SetTimeOut($aTimeOut); 47 $image = new Image(); 48 if( $this->cache->GetAndStream($image,$aCachedName) ) { 49 exit(); 50 } 51 } 52 $this->inline = $aInline; 53 $this->cache_name = $aCachedName; 54 55 $this->title = new Text(); 56 $this->title->ParagraphAlign('center'); 57 $this->title->SetFont(FF_FONT2,FS_BOLD); 58 $this->title->SetMargin(3); 59 $this->title->SetAlign('center'); 60 61 $this->subtitle = new Text(); 62 $this->subtitle->ParagraphAlign('center'); 63 $this->subtitle->SetFont(FF_FONT1,FS_BOLD); 64 $this->subtitle->SetMargin(3); 65 $this->subtitle->SetAlign('center'); 66 67 $this->subsubtitle = new Text(); 68 $this->subsubtitle->ParagraphAlign('center'); 69 $this->subsubtitle->SetFont(FF_FONT1,FS_NORMAL); 70 $this->subsubtitle->SetMargin(3); 71 $this->subsubtitle->SetAlign('center'); 72 73 $this->footer = new Footer(); 74 35 75 } 36 76 37 77 // Specify background fill color for the combined graph 38 78 function SetFillColor($aColor) { 39 79 $this->iFillColor = $aColor; 40 80 } 41 81 42 82 // Add a frame around the combined graph 43 83 function SetFrame($aFlg,$aColor='black',$aWeight=1) { 44 45 46 47 } 48 49 // Specify a background image blend 84 $this->iDoFrame = $aFlg; 85 $this->iFrameColor = $aColor; 86 $this->iFrameWeight = $aWeight; 87 } 88 89 // Specify a background image blend 50 90 function SetBackgroundImageMix($aMix) { 51 91 $this->background_image_mix = $aMix ; 52 92 } 53 93 54 94 // Specify a background image 55 95 function SetBackgroundImage($aFileName,$aCenter_aX=NULL,$aY=NULL) { 56 // Second argument can be either a boolean value or 57 // a numeric 58 $aCenter=TRUE; 59 $aX=NULL; 60 61 if( $GLOBALS['gd2'] && !USE_TRUECOLOR ) { 62 JpGraphError::RaiseL(12001); 63 //("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."); 64 } 65 if( is_numeric($aCenter_aX) ) { 66 $aX=$aCenter_aX; 67 } 68 69 // Get extension to determine image type 70 $e = explode('.',$aFileName); 71 if( !$e ) { 72 JpGraphError::RaiseL(12002,$aFileName); 73 //('Incorrect file name for MGraph::SetBackgroundImage() : '.$aFileName.' Must have a valid image extension (jpg,gif,png) when using autodetection of image type'); 74 } 75 76 $valid_formats = array('png', 'jpg', 'gif'); 77 $aImgFormat = strtolower($e[count($e)-1]); 78 if ($aImgFormat == 'jpeg') { 79 $aImgFormat = 'jpg'; 80 } 81 elseif (!in_array($aImgFormat, $valid_formats) ) { 82 JpGraphError::RaiseL(12003,$aImgFormat,$aFileName); 83 //('Unknown file extension ($aImgFormat) in MGraph::SetBackgroundImage() for filename: '.$aFileName); 84 } 85 86 $this->background_image = $aFileName; 87 $this->background_image_center=$aCenter; 88 $this->background_image_format=$aImgFormat; 89 $this->background_image_x = $aX; 90 $this->background_image_y = $aY; 91 } 92 93 94 // Private helper function for backgound image 95 function _loadBkgImage($aFile='') { 96 if( $aFile == '' ) 97 $aFile = $this->background_image; 98 99 // Remove case sensitivity and setup appropriate function to create image 100 // Get file extension. This should be the LAST '.' separated part of the filename 101 $e = explode('.',$aFile); 102 $ext = strtolower($e[count($e)-1]); 103 if ($ext == "jpeg") { 104 $ext = "jpg"; 105 } 106 107 if( trim($ext) == '' ) 108 $ext = 'png'; // Assume PNG if no extension specified 109 110 $supported = imagetypes(); 111 if( ( $ext == 'jpg' && !($supported & IMG_JPG) ) || 112 ( $ext == 'gif' && !($supported & IMG_GIF) ) || 113 ( $ext == 'png' && !($supported & IMG_PNG) ) ) { 114 JpGraphError::RaiseL(12004,$aFile);//('The image format of your background image ('.$aFile.') is not supported in your system configuration. '); 115 } 116 117 if( $ext == "jpg" || $ext == "jpeg") { 118 $f = "imagecreatefromjpeg"; 119 $ext = "jpg"; 120 } 121 else { 122 $f = "imagecreatefrom".$ext; 123 } 124 125 $img = @$f($aFile); 126 if( !$img ) { 127 JpGraphError::RaiseL(12005,$aFile); 128 //(" Can't read background image: '".$aFile."'"); 129 } 130 return $img; 131 } 96 // Second argument can be either a boolean value or 97 // a numeric 98 $aCenter=TRUE; 99 $aX=NULL; 100 101 if( is_numeric($aCenter_aX) ) { 102 $aX=$aCenter_aX; 103 } 104 105 // Get extension to determine image type 106 $e = explode('.',$aFileName); 107 if( !$e ) { 108 JpGraphError::RaiseL(12002,$aFileName); 109 //('Incorrect file name for MGraph::SetBackgroundImage() : '.$aFileName.' Must have a valid image extension (jpg,gif,png) when using autodetection of image type'); 110 } 111 112 $valid_formats = array('png', 'jpg', 'gif'); 113 $aImgFormat = strtolower($e[count($e)-1]); 114 if ($aImgFormat == 'jpeg') { 115 $aImgFormat = 'jpg'; 116 } 117 elseif (!in_array($aImgFormat, $valid_formats) ) { 118 JpGraphError::RaiseL(12003,$aImgFormat,$aFileName); 119 //('Unknown file extension ($aImgFormat) in MGraph::SetBackgroundImage() for filename: '.$aFileName); 120 } 121 122 $this->background_image = $aFileName; 123 $this->background_image_center=$aCenter; 124 $this->background_image_format=$aImgFormat; 125 $this->background_image_x = $aX; 126 $this->background_image_y = $aY; 127 } 132 128 133 129 function _strokeBackgroundImage() { 134 if( $this->background_image == '' ) 135 return; 136 137 $bkgimg = $this->_loadBkgImage(); 138 // Background width & Heoght 139 $bw = imagesx($bkgimg); 140 $bh = imagesy($bkgimg); 141 // Canvas width and height 142 $cw = imagesx($this->img); 143 $ch = imagesy($this->img); 144 145 if( $this->background_image_x === NULL || $this->background_image_y === NULL ) { 146 if( $this->background_image_center ) { 147 // Center original image in the plot area 148 $x = round($cw/2-$bw/2); $y = round($ch/2-$bh/2); 149 } 150 else { 151 // Just copy the image from left corner, no resizing 152 $x=0; $y=0; 153 } 154 } 155 else { 156 $x = $this->background_image_x; 157 $y = $this->background_image_y; 158 } 159 $this->_imageCp($bkgimg,$x,$y,0,0,$bw,$bh,$this->background_image_mix); 160 } 161 162 function _imageCp($aSrcImg,$x,$y,$fx,$fy,$w,$h,$mix=100) { 163 imagecopymerge($this->img,$aSrcImg,$x,$y,$fx,$fy,$w,$h,$mix); 164 } 165 166 function _imageCreate($aWidth,$aHeight) { 167 if( $aWidth <= 1 || $aHeight <= 1 ) { 168 JpGraphError::RaiseL(12006,$aWidth,$aHeight); 169 //("Illegal sizes specified for width or height when creating an image, (width=$aWidth, height=$aHeight)"); 170 } 171 if( @$GLOBALS['gd2']==true && USE_TRUECOLOR ) { 172 $this->img = @imagecreatetruecolor($aWidth, $aHeight); 173 if( $this->img < 1 ) { 174 JpGraphError::RaiseL(12011); 175 // die("<b>JpGraph Error:</b> Can't create truecolor image. Check that you really have GD2 library installed."); 176 } 177 ImageAlphaBlending($this->img,true); 178 } else { 179 $this->img = @imagecreate($aWidth, $aHeight); 180 if( $this->img < 1 ) { 181 JpGraphError::RaiseL(12012); 182 // die("<b>JpGraph Error:</b> Can't create image. Check that you really have the GD library installed."); 183 } 184 } 185 } 186 187 function _polygon($p,$closed=FALSE) { 188 if( $this->iLineWeight==0 ) return; 189 $n=count($p); 190 $oldx = $p[0]; 191 $oldy = $p[1]; 192 for( $i=2; $i < $n; $i+=2 ) { 193 imageline($this->img,$oldx,$oldy,$p[$i],$p[$i+1],$this->iCurrentColor); 194 $oldx = $p[$i]; 195 $oldy = $p[$i+1]; 196 } 197 if( $closed ) { 198 imageline($this->img,$p[$n*2-2],$p[$n*2-1],$p[0],$p[1],$this->iCurrentColor); 199 } 200 } 201 202 function _filledPolygon($pts) { 203 $n=count($pts); 204 for($i=0; $i < $n; ++$i) 205 $pts[$i] = round($pts[$i]); 206 imagefilledpolygon($this->img,$pts,count($pts)/2,$this->iCurrentColor); 207 } 208 209 function _rectangle($xl,$yu,$xr,$yl) { 210 for($i=0; $i < $this->iLineWeight; ++$i ) 211 $this->_polygon(array($xl+$i,$yu+$i,$xr-$i,$yu+$i, 212 $xr-$i,$yl-$i,$xl+$i,$yl-$i, 213 $xl+$i,$yu+$i)); 214 } 215 216 function _filledRectangle($xl,$yu,$xr,$yl) { 217 $this->_filledPolygon(array($xl,$yu,$xr,$yu,$xr,$yl,$xl,$yl)); 218 } 219 220 function _setColor($aColor) { 221 $this->iCurrentColor = $this->iRGB->Allocate($aColor); 130 if( $this->background_image == '' ) return; 131 132 $bkgimg = Graph::LoadBkgImage('',$this->background_image); 133 134 // Background width & Heoght 135 $bw = imagesx($bkgimg); 136 $bh = imagesy($bkgimg); 137 138 // Canvas width and height 139 $cw = imagesx($this->img); 140 $ch = imagesy($this->img); 141 142 if( $this->doshadow ) { 143 $cw -= $this->shadow_width; 144 $ch -= $this->shadow_width; 145 } 146 147 if( $this->background_image_x === NULL || $this->background_image_y === NULL ) { 148 if( $this->background_image_center ) { 149 // Center original image in the plot area 150 $x = round($cw/2-$bw/2); $y = round($ch/2-$bh/2); 151 } 152 else { 153 // Just copy the image from left corner, no resizing 154 $x=0; $y=0; 155 } 156 } 157 else { 158 $x = $this->background_image_x; 159 $y = $this->background_image_y; 160 } 161 imagecopymerge($this->img,$bkgimg,$x,$y,0,0,$bw,$bh,$this->background_image_mix); 222 162 } 223 163 224 164 function AddMix($aGraph,$x=0,$y=0,$mix=100,$fx=0,$fy=0,$w=0,$h=0) { 225 226 } 227 165 $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h,$mix); 166 } 167 228 168 function Add($aGraph,$x=0,$y=0,$fx=0,$fy=0,$w=0,$h=0) { 229 169 $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h); 230 170 } 231 171 232 172 function _gdImgHandle($agdCanvas,$x,$y,$fx=0,$fy=0,$w=0,$h=0,$mix=100) { 233 if( $w == 0 ) $w = @imagesx($agdCanvas); 234 if( $w === NULL ) { 235 JpGraphError::RaiseL(12007); 236 //('Argument to MGraph::Add() is not a valid GD image handle.'); 237 return; 238 } 239 if( $h == 0 ) $h = @imagesy($agdCanvas); 240 $this->iGraphs[$this->iCnt++] = array($agdCanvas,$x,$y,$fx,$fy,$w,$h,$mix); 173 if( $w == 0 ) { 174 $w = @imagesx($agdCanvas); 175 } 176 if( $w === NULL ) { 177 JpGraphError::RaiseL(12007); 178 //('Argument to MGraph::Add() is not a valid GD image handle.'); 179 return; 180 } 181 if( $h == 0 ) { 182 $h = @imagesy($agdCanvas); 183 } 184 $this->iGraphs[$this->iCnt++] = array($agdCanvas,$x,$y,$fx,$fy,$w,$h,$mix); 241 185 } 242 186 243 187 function SetMargin($lm,$rm,$tm,$bm) { 244 245 246 247 188 $this->lm = $lm; 189 $this->rm = $rm; 190 $this->tm = $tm; 191 $this->bm = $bm; 248 192 } 249 193 250 194 function SetExpired($aFlg=true) { 251 $this->expired = $aFlg; 252 } 253 254 // Generate image header 255 function Headers() { 256 257 // In case we are running from the command line with the client version of 258 // PHP we can't send any headers. 259 $sapi = php_sapi_name(); 260 if( $sapi == 'cli' ) 261 return; 262 263 if( headers_sent() ) { 264 265 echo "<table border=1><tr><td><font color=darkred size=4><b>JpGraph Error:</b> 266 HTTP headers have already been sent.</font></td></tr><tr><td><b>Explanation:</b><br>HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it's image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).<p>Most likely you have some text in your script before the call to <i>Graph::Stroke()</i>. If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser. <p>For example it is a common mistake to leave a blank line before the opening \"<b><?php</b>\".</td></tr></table>"; 267 268 die(); 269 270 } 271 272 if ($this->expired) { 273 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 274 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); 275 header("Cache-Control: no-cache, must-revalidate"); 276 header("Pragma: no-cache"); 277 } 278 header("Content-type: image/$this->img_format"); 195 $this->expired = $aFlg; 279 196 } 280 197 281 198 function SetImgFormat($aFormat,$aQuality=75) { 282 $this->image_quality = $aQuality; 283 $aFormat = strtolower($aFormat); 284 $tst = true; 285 $supported = imagetypes(); 286 if( $aFormat=="auto" ) { 287 if( $supported & IMG_PNG ) 288 $this->img_format="png"; 289 elseif( $supported & IMG_JPG ) 290 $this->img_format="jpeg"; 291 elseif( $supported & IMG_GIF ) 292 $this->img_format="gif"; 293 else 294 JpGraphError::RaiseL(12008); 295 //(" Your PHP (and GD-lib) installation does not appear to support any known graphic formats.". 296 return true; 297 } 298 else { 299 if( $aFormat=="jpeg" || $aFormat=="png" || $aFormat=="gif" ) { 300 if( $aFormat=="jpeg" && !($supported & IMG_JPG) ) 301 $tst=false; 302 elseif( $aFormat=="png" && !($supported & IMG_PNG) ) 303 $tst=false; 304 elseif( $aFormat=="gif" && !($supported & IMG_GIF) ) 305 $tst=false; 306 else { 307 $this->img_format=$aFormat; 308 return true; 309 } 310 } 311 else 312 $tst=false; 313 if( !$tst ) 314 JpGraphError::RaiseL(12009,$aFormat); 315 //(" Your PHP installation does not support the chosen graphic format: $aFormat"); 316 } 317 } 318 319 // Stream image to browser or to file 320 function Stream($aFile="") { 321 $func="image".$this->img_format; 322 if( $this->img_format=="jpeg" && $this->image_quality != null ) { 323 $res = @$func($this->img,$aFile,$this->image_quality); 324 } 325 else { 326 if( $aFile != "" ) { 327 $res = @$func($this->img,$aFile); 328 } 329 else 330 $res = @$func($this->img); 331 } 332 if( !$res ) 333 JpGraphError::RaiseL(12010,$aFile); 334 //("Can't create or stream image to file $aFile Check that PHP has enough permission to write a file to the current directory."); 199 $this->image_format = $aFormat; 200 $this->image_quality = $aQuality; 201 } 202 203 // Set the shadow around the whole image 204 function SetShadow($aShowShadow=true,$aShadowWidth=4,$aShadowColor='gray@0.3') { 205 $this->doshadow = $aShowShadow; 206 $this->shadow_color = $aShadowColor; 207 $this->shadow_width = $aShadowWidth; 208 $this->footer->iBottomMargin += $aShadowWidth; 209 $this->footer->iRightMargin += $aShadowWidth; 210 } 211 212 function StrokeTitle($image,$w,$h) { 213 // Stroke title 214 if( $this->title->t !== '' ) { 215 216 $margin = 3; 217 218 $y = $this->title->margin; 219 if( $this->title->halign == 'center' ) { 220 $this->title->Center(0,$w,$y); 221 } 222 elseif( $this->title->halign == 'left' ) { 223 $this->title->SetPos($this->title->margin+2,$y); 224 } 225 elseif( $this->title->halign == 'right' ) { 226 $indent = 0; 227 if( $this->doshadow ) { 228 $indent = $this->shadow_width+2; 229 } 230 $this->title->SetPos($w-$this->title->margin-$indent,$y,'right'); 231 } 232 $this->title->Stroke($image); 233 234 // ... and subtitle 235 $y += $this->title->GetTextHeight($image) + $margin + $this->subtitle->margin; 236 if( $this->subtitle->halign == 'center' ) { 237 $this->subtitle->Center(0,$w,$y); 238 } 239 elseif( $this->subtitle->halign == 'left' ) { 240 $this->subtitle->SetPos($this->subtitle->margin+2,$y); 241 } 242 elseif( $this->subtitle->halign == 'right' ) { 243 $indent = 0; 244 if( $this->doshadow ) { 245 $indent = $this->shadow_width+2; 246 } 247 $this->subtitle->SetPos($this->img->width-$this->subtitle->margin-$indent,$y,'right'); 248 } 249 $this->subtitle->Stroke($image); 250 251 // ... and subsubtitle 252 $y += $this->subtitle->GetTextHeight($image) + $margin + $this->subsubtitle->margin; 253 if( $this->subsubtitle->halign == 'center' ) { 254 $this->subsubtitle->Center(0,$w,$y); 255 } 256 elseif( $this->subsubtitle->halign == 'left' ) { 257 $this->subsubtitle->SetPos($this->subsubtitle->margin+2,$y); 258 } 259 elseif( $this->subsubtitle->halign == 'right' ) { 260 $indent = 0; 261 if( $this->doshadow ) { 262 $indent = $this->shadow_width+2; 263 } 264 $this->subsubtitle->SetPos($w-$this->subsubtitle->margin-$indent,$y,'right'); 265 } 266 $this->subsubtitle->Stroke($image); 267 268 } 335 269 } 336 270 337 271 function Stroke($aFileName='') { 338 // Find out the necessary size for the container image 339 $w=0; $h=0; 340 for($i=0; $i < $this->iCnt; ++$i ) { 341 $maxw = $this->iGraphs[$i][1]+$this->iGraphs[$i][5]; 342 $maxh = $this->iGraphs[$i][2]+$this->iGraphs[$i][6]; 343 $w = max( $w, $maxw ); 344 $h = max( $h, $maxh ); 345 } 346 $w += $this->lm+$this->rm; 347 $h += $this->tm+$this->bm; 348 349 // User specified width,height overrides 350 if( $this->iWidth !== NULL ) $w = $this->iWidth; 351 if( $this->iHeight!== NULL ) $h = $this->iHeight; 352 353 $this->_imageCreate($w,$h); 354 $this->iRGB = new RGB($this->img); 355 356 $this->_setcolor($this->iFillColor); 357 $this->_filledRectangle(0,0,$w-1,$h-1); 358 359 $this->_strokeBackgroundImage(); 360 361 if( $this->iDoFrame ) { 362 $this->_setColor($this->iFrameColor); 363 $this->iLineWeight=$this->iFrameWeight; 364 $this->_rectangle(0,0,$w-1,$h-1); 365 } 366 367 // Copy all sub graphs to the container 368 for($i=0; $i < $this->iCnt; ++$i ) { 369 $this->_imageCp($this->iGraphs[$i][0], 370 $this->iGraphs[$i][1]+$this->lm,$this->iGraphs[$i][2]+$this->tm, 371 $this->iGraphs[$i][3],$this->iGraphs[$i][4], 372 $this->iGraphs[$i][5],$this->iGraphs[$i][6], 373 $this->iGraphs[$i][7]); 374 } 375 376 // Output image 377 if( $aFileName == _IMG_HANDLER ) { 378 return $this->img; 379 } 380 else { 381 if( $aFileName != '' ) { 382 $this->Stream($aFileName); 383 } 384 else { 385 $this->Headers(); 386 $this->Stream(); 387 } 388 } 272 // Find out the necessary size for the container image 273 $w=0; $h=0; 274 for($i=0; $i < $this->iCnt; ++$i ) { 275 $maxw = $this->iGraphs[$i][1]+$this->iGraphs[$i][5]; 276 $maxh = $this->iGraphs[$i][2]+$this->iGraphs[$i][6]; 277 $w = max( $w, $maxw ); 278 $h = max( $h, $maxh ); 279 } 280 $w += $this->lm+$this->rm; 281 $h += $this->tm+$this->bm; 282 283 // User specified width,height overrides 284 if( $this->iWidth !== NULL && $this->iWidth !== 0 ) $w = $this->iWidth; 285 if( $this->iHeight!== NULL && $this->iHeight !== 0) $h = $this->iHeight; 286 287 if( $this->doshadow ) { 288 $w += $this->shadow_width; 289 $h += $this->shadow_width; 290 } 291 292 $image = new Image($w,$h); 293 $image->SetImgFormat( $this->image_format,$this->image_quality); 294 295 if( $this->doshadow ) { 296 $image->SetColor($this->iFrameColor); 297 $image->ShadowRectangle(0,0,$w-1,$h-1,$this->iFillColor,$this->shadow_width,$this->shadow_color); 298 $w -= $this->shadow_width; 299 $h -= $this->shadow_width; 300 } 301 else { 302 $image->SetColor($this->iFillColor); 303 $image->FilledRectangle(0,0,$w-1,$h-1); 304 } 305 $image->SetExpired($this->expired); 306 307 $this->img = $image->img; 308 $this->_strokeBackgroundImage(); 309 310 if( $this->iDoFrame && ! $this->doshadow ) { 311 $image->SetColor($this->iFrameColor); 312 $image->SetLineWeight($this->iFrameWeight); 313 $image->Rectangle(0,0,$w-1,$h-1); 314 } 315 316 // Copy all sub graphs to the container 317 for($i=0; $i < $this->iCnt; ++$i ) { 318 $image->CopyMerge($this->iGraphs[$i][0], 319 $this->iGraphs[$i][1]+$this->lm,$this->iGraphs[$i][2]+$this->tm, 320 $this->iGraphs[$i][3],$this->iGraphs[$i][4], 321 $this->iGraphs[$i][5],$this->iGraphs[$i][6], 322 -1,-1, /* Full from width and height */ 323 $this->iGraphs[$i][7]); 324 325 326 } 327 328 $this->StrokeTitle($image,$w,$h); 329 $this->footer->Stroke($image); 330 331 // Output image 332 if( $aFileName == _IMG_HANDLER ) { 333 return $image->img; 334 } 335 else { 336 //Finally stream the generated picture 337 $this->cache = new ImgStreamCache(); 338 $this->cache->PutAndStream($image,$this->cache_name,$this->inline,$aFileName); 339 } 389 340 } 390 341 } 391 342 343 // EOF 344 392 345 ?>
Note:
See TracChangeset
for help on using the changeset viewer.