Source for file Graph.class.php

Documentation is available at Graph.class.php

  1. <?php
  2. /**
  3.  * R.E. PHP Graph v1.0
  4.  * 
  5.  * Ez a program megkönnyíti a bonyolultabb alakzatok és megoldások generálását PHP-ben képekre.<br />
  6.  * Alapvetően 3 féle típus támogatott. GIF, JPEG és PNG<br />
  7.  * A generált képek megjeleníthetők a böngészőben, vagy lementhetők a webszerverre, illetve a kliens gépre is.
  8.  * 
  9.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  10.  * @copyright Copyright (C) 2008, Takács Ákos
  11.  * @version 1.0
  12.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  13.  * 
  14.  * @example examples/fullExample.php Teljes példa
  15.  * @package REPHPGraph
  16.  */
  17.         
  18. /**
  19.  * Szükséges függvények
  20.  */
  21. require_once dirname(__FILE__)."/functions.php";
  22.  
  23. /**
  24.  * Agraph importálása
  25.  */
  26. require_once dirname(__FILE__)."/AGraph.class.php";
  27.  
  28. /**
  29.  * FileExistsException ipmortálása
  30.  */
  31. require_once dirname(__FILE__)."/exceptions/FileExistsException.class.php";
  32.  
  33. /**
  34.  * DirExistsException ipmortálása
  35.  */
  36. require_once dirname(__FILE__)."/exceptions/DirExistsException.class.php";
  37.  
  38. /**
  39.  * Grafikát vezérlő osztály
  40.  * 
  41.  * Ebből az osztályból példányosított objektum segítségével hozható létre fő kép,<br />
  42.  * amire ráhelyezhetők a további alakzatok, minták, képek.<br />
  43.  * Lehetőséget nyújt az eredmény szerverre, valamint kliens gépre mentésére, illetve a böngészőben megjelenítésre.<br />
  44.  * Tartalmaz továbbá egy, a színek létrehozására szolgáló {@link createColor()} metódust is.
  45.  * <br />
  46.  * Üres fekete kép létrehozása ( 200 x 200 )
  47.  * <code>
  48.  * <?php
  49.  * $graph = new Graph(200,200);
  50.  * $graph->setBackground(0,0,0);
  51.  * $graph->flush();
  52.  * ?>
  53.  * </code>
  54.  * 
  55.  * @version 1.1
  56.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  57.  * @copyright Copyright (C) 2008, Takács Ákos
  58.  * @package REPHPGraph
  59.  */
  60. class Graph extends AGraph 
  61.     /**
  62.      * Képre felvitt alakzatok erőforrás azonosítóinak listája
  63.      * 
  64.      * @var array 
  65.      */
  66.     protected $objects = array();
  67.  
  68.     /**
  69.      * Grafikus elemek importja
  70.      *
  71.      * @param mixed $objects Importálandó grafikus elem osztályok neve
  72.      *                          (Ha egy osztály, lehet string. Több esetén tömb
  73.      *                          illetve paraméter nélkül hívva az összes grafikus elem)
  74.      */
  75.     public static function importObject($objects=null{
  76.         self::import('objects',$objects);
  77.     }
  78.  
  79.     /**
  80.      * Iterátorok importja
  81.      *
  82.      * @param mixed $iterators Importálandó iterátor osztályok neve
  83.      *                          (Ha egy osztály, lehet string. Több esetén tömb
  84.      *                          illetve paraméter nélkül hívva az összes grafikus elem)
  85.      */
  86.     public static function importIterator($iterators=null{
  87.         self::import('iterators',$iterators);
  88.     }
  89.     /**
  90.      * Osztályok importja
  91.      *
  92.      * @param string $dir Mappa neve, ahol az importálandó osztályok vannak
  93.      * @param mixed $objects Importálandó osztályok neve
  94.      *                          (Ha egy osztály, lehet string. Több esetén tömb
  95.      *                          illetve paraméter nélkül hívva az összes grafikus elem)
  96.      */
  97.     public static function import($dir,$classes=null{
  98.         $dir dirname(__FILE__).'/'.trim($dir,'/');
  99.         if (!is_dir($dir)) {
  100.             throw new DirExistsException("Nincs ilyen könyvtár: ".$dir);
  101.         }
  102.         $all false;
  103.         if (is_string($classes)) {
  104.             $classes array($classes)
  105.         else if (!$classes{
  106.             $classes scandir($dir);
  107.             $all=true;
  108.         }
  109.         foreach ($classes as $object{
  110.             if ($object != '.' and $object != '..' and !is_dir($dir.'/'.$object)) {
  111.                 if (!$all$object .= '.class.php'}
  112.                 else if end(explode('.',$object)) != 'php' {
  113.                     continue;
  114.                 }
  115.                 if (!file_exists($dir.'/'.$object)) {
  116.                     throw new FileExistsException("Nincs ilyen grafikus elem: $dir/".$object);
  117.                 }
  118.                 require_once $dir.'/'.$object;
  119.             }
  120.         }
  121.     }
  122.     
  123.     /**
  124.      * Kép háttérszínének lekérdezése
  125.      * @return int 
  126.      */
  127.     public function getBackground()
  128.     {
  129.         return $this->background;
  130.     }
  131.     /**
  132.      * Kép háttérszínének beállítása
  133.      * 
  134.      * Paraméterezése és működése megegyezik a {@link createColor()}
  135.      * metódus paraméterezésével működésével.
  136.      * 
  137.      * @param int $color 
  138.      * @param int $greenc 
  139.      * @param int $bluec 
  140.      */
  141.     public function setBackground($color,$greenc=null,$bluec=null
  142.     {
  143.         $this->backGround = $this->createColor($color,$greenc,$bluec);    
  144.     }
  145.             
  146.     /**
  147.      * Létrehoz egy üres képet $width szélességgel és $height magassággal
  148.      * 
  149.      * @param int $width Kép szélessége
  150.      * @param int $height Kép magassága
  151.      */
  152.     public function __construct($width,$height)
  153.     {
  154.         $this->width = $width;
  155.         $this->height = $height;
  156.         $this->source = imagecreatetruecolor($width,$height);
  157.     }
  158.     
  159.     /**
  160.      * Objektumok hozzáadása a képhez
  161.      * 
  162.      * Minden újabb képet, vagy alakzatot át kell adni a Graph osztályból példányosított objektumnak.<br />
  163.      * Ez a metódus meghívja az objektum {@link IObject::create()} metódusát, majd létrehozza
  164.      * a megfelelő típusú képet. Ennek a képnek az erőforrásazonosítóját hozzáadja a az {@link $objects} listához.
  165.      * 
  166.      * @param AObject $object 
  167.      */
  168.     function add($object)
  169.     {
  170.         ob_start();
  171.         //háttér kirajzolása
  172.         imagefilledrectangle($object->source,0,0,$object->width-1$object->height-1$object->backGround);
  173.         //ha a transparent tulajdonság true, akkor háttérszín beállítása áttetszővé
  174.         if ($object->transparent === true{
  175.             imageColorTransparent($object->source,$object->backGround);
  176.         }
  177.         //alakzat irajzolása
  178.         $object->create();
  179.         //típus meghatározás
  180.         if (!array_search($object->type,$object->types,trueor $object->type == "jpg"{
  181.             $object->type 'jpeg';
  182.         }
  183.                 
  184.         //kép létrehozása
  185.         if ($object->transparent === true{
  186.             imagegif($object->source)
  187.         else {
  188.             $this->createImage($object,'image'.$object->type)
  189.         }
  190.         //kimenet elfogásával az erőforrásazonosító betöltése az $objects listába
  191.         $image ob_get_clean();
  192.         $object->source imageCreateFromString($image)
  193.         $this->objects[$object;    
  194.     }
  195.     
  196.     /**
  197.      * Felépíti az $objects listából a képet
  198.      * 
  199.      * @return string imageGif | imageJpeg | imagePng
  200.      */    
  201.     private function buildImage(
  202.     {
  203.         //háttérszínnel kitölti a fő képet
  204.         imagefilledrectangle($this->source0,0$this->width-1$this->height-1$this->backGround);
  205.         //szükség esetén áttetszővé teszi a hátteret
  206.         if ($this->transparent === true {
  207.             imageColorTransparent($this->source$this->backGround);
  208.         }
  209.         //az $objects tömb összes elemét rámásolja a fő képre
  210.         foreach($this->objects as $key => $object{
  211.             imagecopy($this->source,$object->source,$object->($object->width 2),$object->($object->height 2),0,0,$object->width,$object->height);    
  212.         }
  213.         //típus beállítása
  214.         if (!array_search($this->type,$this->types,trueor $this->type == "jpg"{
  215.             $this->type = 'jpeg';
  216.         }
  217.         return 'image'.$this->type;       
  218.     }        
  219.         
  220.     /**
  221.      * Kép létrehozása
  222.      * 
  223.      * Létrehoz egy képet az $object objektumból a $func függvény segítségével.<br />
  224.      * Szükség esetén az $src néven lementi a képet a szerveren
  225.      * 
  226.      * @param Object $object AObject | Graph
  227.      * @param string $func képet létrehozo függvény neve
  228.      * @param string $src kép helye mentés esetén
  229.      */
  230.     private function createImage($object,$func,$src=null
  231.     {
  232.         //ha nem gif és nem png képről van szó, akkor a minőséget is be lehet állítani
  233.         if(strtolower($object->type!= 'gif' and strtolower($object->type!= 'png')
  234.         {
  235.             $func($object->source,$src,$object->quality);
  236.         }else{
  237.             $func($object->source,$src);
  238.         }                
  239.     }  
  240.     /**
  241.      * Kép küldése a kimenetre.
  242.      */
  243.     function flush()
  244.     {
  245.         //kép összeállítása
  246.         $func $this->buildImage();
  247.         //kimenet típusának beállítása
  248.         header("Content-type: image/".$this->type);
  249.         //kimenetre küldés    
  250.         $this->createImage($this,$func);
  251.     }
  252.  
  253.     /**
  254.      * Kép felkínálása letöltésre a kliensen
  255.      * 
  256.      * @param string $src Letöltés után milyen néven legyen mentve a kép
  257.      */
  258.     function saveClient($src)
  259.     {
  260.         //kép összeállítása
  261.         $func $this->buildImage();
  262.         //kimenet tipusának beállítása, és letöltésre állítás
  263.         header("Content-type: image/".$this->type);
  264.         header('Content-Disposition: attachment; filename="'.trim(htmlentities(basename($src))).'"')
  265.         //küldés a kimenetre
  266.         $this->createImage($this,$func);
  267.     }    
  268.     /**
  269.      * Kép mentése a szerveren
  270.      * 
  271.      * @param string $src Mentés helye
  272.      */
  273.     function save($src)
  274.     {
  275.         $this->createImage($this,$this->buildImage(),$src);
  276.     }        
  277. }
  278.  
  279. ?>

Documentation generated on Tue, 09 Feb 2010 01:17:48 +0100 by phpDocumentor 1.4.1