Ignore:
Timestamp:
Apr 14, 2019, 2:31:40 PM (5 years ago)
Author:
roby
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/client/modules/Elezioni/grafici/jpgraph_mgraph.php

    r265 r267  
    11<?php
    22/*=======================================================================
    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  */
     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 1012 2008-06-23 15:02:15Z ljp $
     7//
     8// Copyright (c) Aditus Consulting. All rights reserved.
     9//========================================================================
     10*/
    1111
    1212//=============================================================================
    1313// CLASS MGraph
    14 // Description: Create a container image that can hold several graph
     14// Description: Create a container image that can hold several graph 
    1515//=============================================================================
    1616class MGraph {
    17 
    18     public $title = null, $subtitle = null, $subsubtitle = null;
    1917
    2018    protected $img=NULL;
    2119    protected $iCnt=0,$iGraphs = array(); // image_handle, x, y, fx, fy, sizex, sizey
    2220    protected $iFillColor='white', $iCurrentColor=0;
    23     protected $lm=4,$rm=4,$tm=4,$bm=4;
     21    protected $lm=0,$rm=0,$tm=0,$bm=0;
    2422    protected $iDoFrame = FALSE, $iFrameColor = 'black', $iFrameWeight = 1;
    2523    protected $iLineWeight = 1;
    2624    protected $expired=false;
    27     protected $cache=null,$cache_name = '',$inline=true;
    28     protected $image_format='png',$image_quality=75;
     25    protected $img_format='png',$image_quality=75;
    2926    protected $iWidth=NULL,$iHeight=NULL;
    3027    protected $background_image='',$background_image_center=true,
    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 
     28        $backround_image_format='',$background_image_mix=100,
     29        $background_image_y=NULL, $background_image_x=NULL;
    3630
    3731    // Create a new instane of the combined graph
    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 
     32    function MGraph($aWidth=NULL,$aHeight=NULL) {
     33        $this->iWidth = $aWidth;
     34        $this->iHeight = $aHeight;
    7535    }
    7636
    7737    // Specify background fill color for the combined graph
    7838    function SetFillColor($aColor) {
    79         $this->iFillColor = $aColor;
     39        $this->iFillColor = $aColor;
    8040    }
    8141
    8242    // Add a frame around the combined graph
    8343    function SetFrame($aFlg,$aColor='black',$aWeight=1) {
    84         $this->iDoFrame = $aFlg;
    85         $this->iFrameColor = $aColor;
    86         $this->iFrameWeight = $aWeight;
    87     }
    88 
    89     // Specify a background image blend
     44        $this->iDoFrame = $aFlg;
     45        $this->iFrameColor = $aColor;
     46        $this->iFrameWeight = $aWeight;
     47    }
     48
     49    // Specify a background image blend   
    9050    function SetBackgroundImageMix($aMix) {
    91         $this->background_image_mix = $aMix ;
     51        $this->background_image_mix = $aMix ;
    9252    }
    9353
    9454    // Specify a background image
    9555    function SetBackgroundImage($aFileName,$aCenter_aX=NULL,$aY=NULL) {
    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     }
     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    }   
    128132
    129133    function _strokeBackgroundImage() {
    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);
     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);
    162222    }
    163223
    164224    function AddMix($aGraph,$x=0,$y=0,$mix=100,$fx=0,$fy=0,$w=0,$h=0) {
    165         $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h,$mix);
    166     }
    167 
     225        $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h,$mix);
     226    }
     227   
    168228    function Add($aGraph,$x=0,$y=0,$fx=0,$fy=0,$w=0,$h=0) {
    169         $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h);
     229        $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h);
    170230    }
    171231
    172232    function _gdImgHandle($agdCanvas,$x,$y,$fx=0,$fy=0,$w=0,$h=0,$mix=100) {
    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);
     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);
    185241    }
    186242
    187243    function SetMargin($lm,$rm,$tm,$bm) {
    188         $this->lm = $lm;
    189         $this->rm = $rm;
    190         $this->tm = $tm;
    191         $this->bm = $bm;
     244        $this->lm = $lm;
     245        $this->rm = $rm;
     246        $this->tm = $tm;
     247        $this->bm = $bm;
    192248    }
    193249
    194250    function SetExpired($aFlg=true) {
    195         $this->expired = $aFlg;
     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>
     266HTTP 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>&lt;?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");
    196279    }
    197280
    198281    function SetImgFormat($aFormat,$aQuality=75) {
    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         }
     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.");
    269335    }
    270336
    271337    function Stroke($aFileName='') {
    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         }
     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        }
    340389    }
    341390}
    342391
    343 // EOF
    344 
    345392?>
Note: See TracChangeset for help on using the changeset viewer.