Source for file Text.class.php

Documentation is available at Text.class.php

  1. <?php
  2. /**
  3.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  4.  * @copyright Copyright (C) 2008, Takács Ákos
  5.  * @package REPHPGraph
  6.  */
  7.  
  8. /**
  9.  * Aobject importálása
  10.  */
  11. require_once dirname(__FILE__)."/../AObject.class.php";
  12.  
  13. /**
  14.  * IObject importálása
  15.  */
  16. require_once dirname(__FILE__)."/../interfaces/IObject.class.php";
  17.  
  18. /**
  19.  * FileExistsException ipmortálása
  20.  */
  21. require_once dirname(__FILE__)."/../exceptions/FileExistsException.class.php";
  22.  
  23. /**
  24.  * Szövegeket kezelő osztály
  25.  * 
  26.  * Ez az osztály végzi a szövegek létrehozását. A szöveg betűmérete és típusa is megadható.
  27.  * Alaméprtelmezett típus az <b>Arial</b><br /><br />
  28.  * 
  29.  * Tipp: A {@link $backGround} tulajdonságot a jó minőség érdekében állítsuk
  30.  * azonosra a kép hátterének színével Akkor is, ha a szöveget transparent-re állítjuk!<br /><br />
  31.  * 
  32.  * Egy egyszerű szöveget a következő módon hozhatunk létre:<br />
  33.  * {@example ../examples/text.php}
  34.  * 
  35.  * @version 1.0
  36.  * @package REPHPGraph
  37.  */
  38. class Text extends AObject implements IObject
  39. {
  40.     /**
  41.      * Szövegegdoboz koordinátái
  42.      * 
  43.      * {@link http://php.net/manual/hu/function.imagettfbbox.php}<br />
  44.      * Csak olvasható (readonly)
  45.      * 
  46.      * @var array 
  47.      */
  48.     protected $ttfbox = array();
  49.         
  50.     /**
  51.      * Betűtípus
  52.      * 
  53.      * Alapértelmezett az Arial, de beállítható saját betűtípus is az url megadásával<br />
  54.      * Csak olvasható (readonly)
  55.      * 
  56.      * @var string 
  57.      */
  58.     protected $fonttype = './fonts/arial.ttf';
  59.     /**
  60.      * Betűméret
  61.      * 
  62.      * Csak olvasható (readonly)
  63.      * 
  64.      * @var int 
  65.      */
  66.     protected $fontsize = 10;
  67.     /**
  68.      * Szöveg tartalma
  69.      * 
  70.      * Csak olvasható (readonly)
  71.      * 
  72.      * @var string 
  73.      */
  74.     protected $value = '';
  75.     
  76.     /**
  77.      *  A képméret kiszámításához szükséges tulajdonságokat csak konstruktorban lehet
  78.      * beállítani. Később módosítani nem lehet.
  79.      * 
  80.      * @param string $text 
  81.      * @param int $fontsize 
  82.      * @param int $angle 
  83.      * @param string $fonttype 
  84.      */        
  85.     function Text($text,$fontsize=20,$angle=0,$fonttype null)
  86.     {
  87.         //Elforgatás átváltása -180 -s +180 fok közé
  88.         if (($angle $angle 360180$angle $angle-360;
  89.         //Alapértelmezett fonttípus beállítása
  90.         if (!$fonttype$fonttype dirname(dirname(__FILE__)) ltrim($this->fonttype,'.')}
  91.         //szöveget körülvevő szövegdoboz koordinátái
  92.         $this->ttfbox = $ttfbox imageTTFBBox($fontsize,-$angle,$fonttype,$text);
  93.         //szélesség és magasság kiszámítása
  94.         $width abs($ttfbox[0]abs($ttfbox[4]);
  95.         $height abs($ttfbox[1]abs($ttfbox[5]);
  96.         $height ($height ($maxY (abs($ttfbox[3]abs($ttfbox[7]))))
  97.             ? $maxY $height;
  98.         $width ($width ($maxX (abs($ttfbox[2]abs($ttfbox[6]))))
  99.             ? $maxX $width;
  100.                 
  101.         $this->width = $width;
  102.         $this->height = $height;
  103.                 
  104.         $this->angle = $angle;
  105.         $this->fonttype = $fonttype;
  106.         $this->fontsize = $fontsize;
  107.                 
  108.         //Hibás betűtípus esetén kivétel kiváltása 
  109.         if (!file_exists($this->fonttype)) {
  110.             throw new FileExistsException("A betűtípus fájl nem található!");
  111.         }
  112.                 
  113.         $this->value = $text;
  114.         //kép létrehozása
  115.         $this->source = imagecreatetruecolor($width,$height);
  116.         //színek beállítása
  117.         $this->backGround = imageColorAllocate($this->source,1,1,1);
  118.         $this->color = imageColorAllocate($this->source,1,1,1);
  119.         $this->borderColor = null;
  120.     }
  121.     /**
  122.      * X koordináta beállítása
  123.      * 
  124.      * $Jx paraméter beállításával megszabható, hogy az X koordinátát a szöveg mely pontjától számolja<br />
  125.      * <b>$Jx értékei</b><br/>
  126.      * <ul>
  127.      * <li>0: Szöveg bal oldalától</li>
  128.      * <li>1: szöveg közepétől</li>
  129.      * <li>2: szöveg jobb oldalától</li>
  130.      * </ul>
  131.      * @param int $x 
  132.      * @param int $Jx 0 | 1 | 2
  133.      */
  134.     function setX($x,$Jx 0)
  135.     {
  136.         if($Jx == 0{
  137.             $eltol ceil($this->width / 2);
  138.         else if ($Jx == 1{
  139.             $eltol 0;
  140.         else {
  141.             $eltol 0-ceil($this->width / 2);
  142.         }
  143.         $this->x = $eltol $x;
  144.     }
  145.     /**
  146.       * Y koordináta beállítása
  147.      * 
  148.      * $Jy paraméter beállításával megszabható, hogy az Y koordinátát a szöveg mely pontjától számolja<br />
  149.      * <b>$Jy értékei</b><br/>
  150.      * <ul>
  151.      * <li>0: Szöveg tetejétől</li>
  152.      * <li>1: szöveg közepétől</li>
  153.      * <li>2: szöveg aljától</li>
  154.      * </ul>
  155.      * 
  156.      * @param int $y 
  157.      * @param int $Jy 0 | 1 | 2
  158.      */
  159.     function setY($y,$Jy 0)
  160.     {
  161.         if($Jy == 0{
  162.             $eltol ceil($this->height / 2);
  163.         else if ($Jy == 1{
  164.             $eltol 0;
  165.         else {
  166.             $eltol 0-ceil($this->height / 2);
  167.         }
  168.         $this->y = $eltol $y;
  169.     }
  170.  
  171.      /**
  172.       * Szöveg létrehozása a képen
  173.       * 
  174.       */
  175.     function create()
  176.     {
  177.         if ($this->angle < 0{
  178.             $y $this->height-$this->ttfbox[1];
  179.             if (abs($this->angle<= 90)  {
  180.                 $x abs($this->ttfbox[6]);
  181.             else {
  182.                 $x abs($this->ttfbox[4]);
  183.                 $y $this->height - $this->ttfbox[7];
  184.             }
  185.         else {
  186.             $y $this->height - $this->ttfbox[3];
  187.             if ($this->angle <= 90{
  188.                 $x $this->width - $this->ttfbox[4];
  189.             else {
  190.                 $x $this->width - $this->ttfbox[6];
  191.                 $y=abs($this->ttfbox[1]);
  192.             }
  193.         }
  194.         imageTTFText($this->source,$this->fontsize,-$this->angle,$x,$y,$this->color,$this->fonttype,$this->value);    
  195.         if ($this->borderColor != $this->backGround and $this->borderColor{
  196.             $this->createBorder($x,$y);
  197.         }
  198.     }
  199.      /**
  200.       * Szöveg körüli keret
  201.       * 
  202.       * ($x,$y) koordináták a keret bal alsó koordinátái.
  203.       * A szélesség a szöveg szélessége lesz, magassága pedig a szöveg magassága.
  204.       * 
  205.       * @param int $x 
  206.       * @param int $y 
  207.       */
  208.     protected function createBorder($x,$y)
  209.     {
  210.         $leftTopX $x $this->ttfbox[6];
  211.         $leftTopY $y $this->ttfbox[7];
  212.         $leftBottomX $x $this->ttfbox[0];
  213.         $leftBottomY $y $this->ttfbox[1];
  214.            
  215.         $rightTopX $x $this->ttfbox[4];
  216.         $rightTopY $y $this->ttfbox[5];
  217.         $rightBottomX $x $this->ttfbox[2];
  218.         $rightBottomY $y $this->ttfbox[3];
  219.    
  220.         //keret széleségének és magasságának 1 px-el csökkentése
  221.         $leftBottomY += ($this->angle > -135 && $this->angle <= 45? -1;
  222.         $leftBottomX += (($this->angle >= 135 && $this->angle <= 180
  223.                 or ($this->angle < -45 && $this->angle >= -180)) ? -1;
  224.         $leftTopX += (($this->angle > && $this->angle < 45)
  225.                 or $this->angle > 45 && $this->angle <= 180 )
  226.                 or $this->angle < -135? -1;
  227.         $leftTopY += (($this->angle > 135 && $this->angle <= 180)
  228.                 or $this->angle <= -45 && $this->angle >= -180 )) ? -1;
  229.                         
  230.         $rightBottomX += ($this->angle > -135 && $this->angle <= 45? -1;
  231.         $rightBottomY += ($this->angle > -45 && $this->angle <= 135? -1;
  232.         $rightTopX += ($this->angle >= -45 && $this->angle <= 135? -1;
  233.         $rightTopY += (($this->angle > 45 && $this->angle <= 180)
  234.                 or $this->angle < -135? -1;               
  235.                 
  236.         //bal oldali keret
  237.         imageline($this->source,
  238.             $leftBottomX,$leftBottomY,$leftTopX,$leftTopY,
  239.             $this->borderColor);
  240.         //jobb oldali keret
  241.         imageline($this->source,
  242.             $rightBottomX,$rightBottomY,$rightTopX,$rightTopY,
  243.             $this->borderColor);
  244.         //felső keret
  245.         imageline($this->source,
  246.             $leftTopX,$leftTopY,$rightTopX,$rightTopY,
  247.             $this->borderColor);
  248.         //alsó keret
  249.         imageline($this->source,
  250.             $leftBottomX,$leftBottomY,$rightBottomX,$rightBottomY,
  251.             $this->borderColor);     
  252.     }    
  253. }
  254. ?>

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