Tvorba webu

peeeeta
Uživatelský avatar
WD Trader: 4.83/5

Příspěvky: 2055
Registrace: 02.09.2012
Dobrý den,
prosím vás chtěl jsem upravit script, který generuje text do obrázku, ale nějak se mi vůbec nechce obrázek zobrazit.
Prosím co jsem udělal špatně.

index.php
Kód: Vybrat vše
<?php
include './cftextimage/cftextimage.class.php';
?>
<?php
$img = new imageText();
$img->imageSettings('ahoj', 25,'pokus','3aa3ff');
echo $img->makeImage('html');
?>


a cftextimage.class.php
Kód: Vybrat vše
<?php
if(isset($_GET['text'])){
   $authKey   = isset($_GET['a'])      ? $_GET['a']:'';
   $text      = isset($_GET['text'])   ? $_GET['text']:'';
   $fontSize   = isset($_GET['size'])   ? (intval($_GET['size'])<5?null:intval($_GET['size'])):null;
   $fontName   = isset($_GET['font'])   ? $_GET['font']:null;
   $fontColor   = isset($_GET['color'])   ? $_GET['color']:null;

   $timg = new imageText();
   $timg->imageSettings($text,$fontSize,$fontName,$fontColor);
   $timg->authSign($authKey);
   $timg->makeImage();
}


class imageText {

   var $set = array();
   var $imgSet = array();
   var $imgKey;

   function __construct() {
   // Settings
      $this->set['Path']         = realpath(dirname(__FILE__)); // set's the server path to the script folder
      $this->set['url']         = 'http://text.jecool.net'; // url to the script folder
      $this->set['cacheDir']      = '/cache/';            // directory for caching generated images should be writable
      $this->set['imgQuality']   = 0;                  // image save Quality 0-9 (0 is best, not 9)
      $this->set['fontDir']      = $this->set['Path'].'/fonts/';      // full path to font folder
      $this->set['fontName']      = '';                  // preferred TTF font (it needs to be in the fonts folder)
      $this->set['fontSize']      = 30;                  // preferred font size
      $this->set['fontColor']      = 666;                  // preferred font color
      $this->set['userKey']      = 'key';         // your user key it's best to make this a random string
   }


/*
* imageSettings
*
* text -> text on image (str)
* $fontSize -> font settings (arr)
* $fontName -> dir\imageName.png (str)
* $fontColor -> image save quality (int)
*/
   public function imageSettings($text,$fontSize=null,$fontName=null,$fontColor=null){
      $this->imgSet['txt'] = $text;
      $this->imgSet['fontSize']   = is_numeric($fontSize) ? (int)$fontSize:$fontSize;
      $this->imgSet['fontColor']   = $fontColor;
      $this->imgSet['fontName']   = $fontName;
   }


/*
* basic sign checking: computing md5 sum of concatenation of secret key and parameters
*
* auth_sign -> user key (str)
* var -> key var (arr) (order -> userKey, text, fontSize, fontColor, fontName)
*/
   public function authSign($authKey){
      $this->imgKey = md5($this->set['userKey'].implode("",$this->imgSet));
      if ($this->imgKey != $authKey){
      // auth error, provided sign is invalid
         die('Auth failed');//.$authKey.' != '.$this->imgKey);
      }
   }


/*
* Make the image
*
* return -> the type of info to send back (str)
*/
   public function makeImage($return = 'print'){
   
      $this->imgSet['fontSize']   = !is_null($this->imgSet['fontSize']) && is_numeric($this->imgSet['fontSize']) ? (int)$this->imgSet['fontSize']:$this->set['fontSize'];
      $this->imgSet['fontColor']   = !is_null($this->imgSet['fontColor'])   ? $this->imgSet['fontColor'] : $this->set['fontColor'];
      $this->imgSet['fontName']   = !is_null($this->imgSet['fontName'])   ? $this->imgSet['fontName']    : $this->set['fontName'];

   // set image key for html out
      if($return != 'print'){
         $this->imgKey = md5($this->set['userKey'].implode("",$this->imgSet));
      }

   // if cached file exists output it and quit or return the cache file address
      $cacheImg = $this->loadCache($return);
      if(is_resource($cacheImg)) return $cacheImg;
      if($return == 'html' && is_array($cacheImg))return $cacheImg[0];

      $fontAddress   = $this->set['fontDir'].$this->imgSet['fontName'].'.ttf';
      $txtArray      = explode("|",$this->imgSet['txt']);
      $longStr       = 0;
      $offy         = 3;
      $offx         = 3;

      foreach ($txtArray as $line){
         $lines[]=$line;
         $longStr = strlen($line)>strlen($longStr)?$line:$longStr;
      }

      $n = count($lines);
      $bbox = $this->imagettfbbox_t($this->imgSet['fontSize'], 0, $fontAddress, $longStr);

      $tww = abs($bbox[2] - $bbox[0]) * 1.01; //Calculates the width of the text box by subtracting the Upper Right "X" position with the Lower Left "X" position.
      $thh = abs($bbox[7] - $bbox[1]); //Calculates the height of the text box by adding the absolute value of the Upper Left "Y" position with the Lower Left "Y" position.

      $th   = -$bbox[7]-1;
      $sp   = ($n>1)?$th+((($thh*$n)-($n*$th))/($n)):0;

      $width   = $tww+($offx*2);
      $height   = $thh*$n+($offy*2);
      $image   = $this->transparentImage($width,$height);// creating image

      $fontColor = $this->html2rgb($this->imgSet['fontColor']);
      $tclr = imagecolorallocate($image, $fontColor[0], $fontColor[1], $fontColor[2]);

      $ynew = $this->Vert($height,$thh*$n,$th);

      foreach($lines as $tx){
         $bbox   = $this->imagettfbbox_t  ($this->imgSet['fontSize'], 0, $fontAddress, $tx);
         $tw      = $bbox[2]-$bbox[0];
         $xnew   = $this->Horiz($width,$tww,$tw);
         imagettftext($image, $this->imgSet['fontSize'], 0, $xnew, $ynew, $tclr, $fontAddress, $tx);// rendering text
         $ynew += $sp;
      }

   // save cache file
      imagepng($image, $cacheImg,$this->set['imgQuality']); // outputing PNG image to file cache

   // return image as resource
      if($return == 'resource'){
         return $image;
      }
   // output html image tag
      elseif($return == 'html'){
         return '<img src="'.$this->set['url'].$this->set['cacheDir'].$this->imgKey.'.png" alt="'.implode(" ",$lines).'" title="'.implode(" ",$lines).'" />';
      }
   // print image png
      else{
         $this->browserCache(time());
         header("Content-type: image/png");
         imagepng($image);
      }

   // destroy image
      imagedestroy($image);
   }


/*
* checking for cached file:
*
* return -> the type of info to send back (str)
*/
   private function loadCache($return){
      $cacheFile = $this->set['Path'].$this->set['cacheDir'].$this->imgKey.'.png';
   //if cached file exists
      if (!file_exists($cacheFile))return $cacheFile;
   
   //if cached file exists output it and quit
      if($return == 'resource')   return $this->openImage($cacheFile);
      if($return == 'html')      return array('<img src="'.$this->set['url'].$this->set['cacheDir'].$this->imgKey.'.png'.'" alt="'.urlencode(str_replace("|"," ",$this->imgSet['txt'])).'" title="'.urlencode(str_replace("|"," ",$this->imgSet['txt'])).'" />');
   
      if(array_key_exists("HTTP_IF_MODIFIED_SINCE",$_SERVER)){
         $if_modified_since=strtotime(preg_replace('/;.*$/','',$_SERVER["HTTP_IF_MODIFIED_SINCE"]));
         if($if_modified_since >= filemtime($cacheFile)){
            header("HTTP/1.0 304 Not Modified");
            exit();
         }
      }
      $this->browserCache(filemtime($cacheFile));
      $filePieces   = pathinfo($cacheFile);
      header("Content-type: image/".($filePieces['extension']=='jpg'?'jpeg':$filePieces['extension']));
      readfile($cacheFile);
      exit();
   }


/*
* Set's the browsers Cache
*
* time -> the time when the file was last modified
*/
   private function browserCache($time){
      header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT', true, 200);
      header('Expires: '.gmdate('D, d M Y H:i:s', $time + 86400*365).' GMT', true, 200);
      header("Pragma: public");
      header("Cache-Control: maxage=".(86400*14));
   }


/*
* openImage
*
* $src -> address of the image
* return image resource
*/
   private function openImage($src){
      switch( exif_imagetype($src)){
         case IMAGETYPE_PNG:
            $img = @imagecreatefrompng($src);
            break;
         case IMAGETYPE_GIF:
            $img = @imagecreatefromgif($src);
            break;
         case IMAGETYPE_JPEG:
            $img = @imagecreatefromjpeg($src);
            break;
         default:
            die('can\'t open image');
            break;
      }

      return $img;
   }


/*
* Sets the horizontal position of the first character of a line of text.
*
* $width -> width of the image
* $twidth -> width of the longest line of this group of lines of text
* $lwidth -> width of this line of text.
*/
   private function Horiz($width,$twidth,$lwidth){
      $xnew=0;
      $just='left';
      $horz='center';
      if($just=="right")$xnew=$twidth-$lwidth-2;
      if($just=="center")$xnew=($twidth-$lwidth)/2;
      if($just=="left")$xnew=1;
      if($horz=="right")$xnew=$xnew+($width-$twidth);
      if($horz=="center")$xnew=$xnew+($width-$twidth)/2;
      return $xnew;
   }


/*
* Sets the vertical position of the first character of a line of text.
*
* $height -> height of the image
* $theight -> height of this group of lines of text
* $lheight -> height of one line of text.
*/
   private function Vert($height,$theight,$lheight){
      $vert = 'center';
      if($vert=="center")$ynew=($height/2)-($theight/2)+$lheight;
      if($vert=="top")$ynew=$lheight;
      if($vert=="bottom")$ynew=$height-$theight+$lheight;
      return $ynew;
   }


/*
* html2rgb recognizes HTML or CSS colors in format #(hex_red)(hex_green)(hex_blue),
* where hex_red, hex_green and hex_blue are 1 or 2-digit hex-representations of red,
* green or blue color components.
*
* color -> hex color (str)
*/
   private function html2rgb($color) {
      if (strlen($color) == 6) {
         list($strRed, $strGreen, $strBlue) = array( $color[0].$color[1],
                                          $color[2].$color[3],
                                          $color[4].$color[5]);
      } elseif (strlen($color) == 3) {
         list($strRed, $strGreen, $strBlue) = array( $color[0].$color[0],
                                          $color[1].$color[1],
                                          $color[2].$color[2]);
      } elseif (strlen($color) == 2) {
         list($strRed, $strGreen, $strBlue) = array( $color[0].$color[1],
                                          $color[0].$color[1],
                                          $color[0].$color[1]);
      } elseif (strlen($color) == 1) {
         list($strRed, $strGreen, $strBlue) = array( $color[0].$color[0],
                                          $color[0].$color[0],
                                          $color[0].$color[0]);
      }

      $strRed   = hexdec($strRed);
      $strGreen = hexdec($strGreen);
      $strBlue  = hexdec($strBlue);

      return array($strRed, $strGreen, $strBlue);
   }


/*
* imagettfbbox_t a better function to find the coordinates of the text bounding box so I used it.
* made by uquay K Calloway http://ruquay.com/sandbox/imagettf/ made
*/
   private function imagettfbbox_t($size, $angle, $fontfile, $text){
      // compute size with a zero angle
      $coords = imagettfbbox($size, 0, $fontfile, $text);
      // convert angle to radians
      $a = deg2rad($angle);
      // compute some usefull values
      $ca = cos($a);
      $sa = sin($a);
      $ret = array();
      // perform transformations
      for($i = 0; $i < 7; $i += 2){
         $ret[$i] = round($coords[$i] * $ca + $coords[$i+1] * $sa);
         $ret[$i+1] = round($coords[$i+1] * $ca - $coords[$i] * $sa);
      }
      return $ret;
   }


/*
* Checking for gd, Freetype support and
* that your cache dir is really writable to PHP scripts
*
* dir -> cache dir (str)
*/
   private function checking($dir){
      if (!function_exists('gd_info')) die('No <a href="http://www.php.net/manual/en/ref.image.php">gd</a> support in PHP.');
      $gd = gd_info();
      if ($gd["FreeType Support"] == false) die('No FreeType support in gd</a>');

      $tf = $dir.md5(rand()).".test";
      $f = @fopen($tf, "w");
      if ($f == false)
         die("Fatal error! {$cache_dir} is not writable. Set 'chmod 777 {$cache_dir}'
               or something like this");
      fclose($f);
      unlink($tf);
   }

   private   function transparentImage($width,$height){
      $im = imagecreatetruecolor($width, $height);
      imagealphablending($im, false);
      $color = imagecolorallocatealpha($im, 0, 0, 0, 127);
      imagefill($im, 0, 0, $color);
      imagesavealpha($im, true);
      imagealphablending($im, true);
      return $im;
   }
}
?>
Pokud jsem ti pomohl přidej mi bod tlačítkem [+]
Wedos aktuální slevy
 CZC slevové kupóny

Wladass
Uživatelský avatar
WD Trader: 4.43/5

Příspěvky: 2134
Registrace: 13.09.2011
První věc co mě napadla bez toho abych koukal do kódu nebo tě požádal o vypsání chyby, kterou ti to vyhazuje, je ta, jestli máš na hostingu gd library ?

peeeeta
Uživatelský avatar
WD Trader: 4.83/5

Příspěvky: 2055
Registrace: 02.09.2012
GD library je GD knihovna? Pokud ano tak ji mám.
Pokud jsem ti pomohl přidej mi bod tlačítkem [+]
Wedos aktuální slevy
 CZC slevové kupóny

Pro plnohodnotné využívání fóra, vč. psaní příspěvků se musíte registrovat nebo se přihlásit.
Registrovat se nebo Přihlásit se