#native_company# #native_desc#
#native_cta#

Image Resize and crop, copyright write and marge logo on img

By Halit YESIL
on March 25, 2007

Version: image.class 1.2

Type: Class

Category: File Management

License: GNU General Public License

Description: * Script : Image resize and croping class.
* You can Write copyright text and attach your logo write on image with this class
*
* *****************************************************************************************
*
*
* $obj = new pg_image($arg);
*
*
* —————————————————————————————–
* Varibles Information
* [0] type => (POST | FILE) => Source File Send Type _FILES OR Dir
* [1] file => ({if POST Array file = $_FILES[‘yourfile’]}|{if FILE false}) => Source File filesource
* [2] path => ({if FILE String [ dirname/filename.extension ]}) => Source File Root Path
* [3] target => ({if FILE String [ dirname/filename.extension ]}) => Target File Root Path
* [4] width => (integer) => Target File Width
* [5] height => (integer) => Target File Height
* [6] quality => (integer 1 – 100) => Target File Quality 0-100 %
* [7] action => (crop | resize) => Target Action “resize” OR “crop”
* [8] bordersize => (integer 0-5) => Target Border Size
* [9] bordercolor => (color hex) => Target Border Color
* [10] bgcolor => (color hex) => Target Background Color
* [11] copytext => (String) => Copyright Content Text
* [12] copycolor => (color hex) => Copyright Text Color
* [13] copyshadow => (color hex) => Copyright Text Shadow color
* [14] copybgcolor => (color hex) => Copyright Background Color
* [15] copybgshadow => (color hex) => Copyright Background Shadow Color
* [16] copybordersize => (integer 0-5) => Copyright Border Size 1-3
* [17] copybordercolor => (color hex) => Copyright Border Color
* [18] copyposition => (top | topright | topleft | center | left | right | bottom | bottomright | bottomleft) => Copyright Position
* [19] logoposition => (top | topright | topleft | center | left | right | bottom | bottomright | bottomleft) => Logo Image Position
* [20] logoimage => (String [ dirname/filename.extension] Allow Extension (PNG | GIF | JPG)) => Logo Image Root Path “PNG” OR “GIF” OR “JPG”

<?php

	/**
	 * *****************************************************************************************
	 * Author 		: Halit YESIL
	 * www			: www.halityesil.com, www.prografik.net, www.trteknik.net
	 * email		: [email protected], [email protected], [email protected]
	 * GSM			: +90.535 648 3504
	 * Create Date	: 21 / 03 / 2007
	 * 
	 * 
	 * Script		: Image resize and croping class. 
	 * 				 You can Write copyright text and attach your logo write on image with this class
	 * 
	 * *****************************************************************************************
	 * 
	 * 
	 * $obj = new pg_image($arg);
	 *
	 * 
	 * -----------------------------------------------------------------------------------------
	 * Varibles Information
	 * 		[0] type => (POST | FILE) => Source File Send Type _FILES OR Dir
	 * 		[1] file => ({if POST Array file = $_FILES['yourfile']}|{if FILE false}) => Source File filesource
	 * 		[2] path => ({if FILE String [ dirname/filename.extension ]}) => Source File Root Path
	 * 		[3] target => ({if FILE String [ dirname/filename.extension ]}) => Target File Root Path
	 * 		[4] width => (integer) => Target File Width
	 * 		[5] height => (integer) => Target File Height
	 * 		[6] quality => (integer 1 - 100) => Target File Quality 0-100 %
	 * 		[7] action => (crop | resize) => Target Action "resize" OR "crop"
	 * 		[8] bordersize => (integer 0-5) => Target Border Size
	 * 		[9] bordercolor => (color hex) => Target Border Color
	 * 		[10] bgcolor => (color hex) => Target Background Color
	 * 		[11] copytext => (String) => Copyright Content Text
	 * 		[12] copycolor => (color hex) => Copyright Text Color
	 * 		[13] copyshadow => (color hex) => Copyright Text Shadow color
	 * 		[14] copybgcolor => (color hex) => Copyright Background Color
	 * 		[15] copybgshadow => (color hex) => Copyright Background Shadow Color
	 * 		[16] copybordersize => (integer 0-5) => Copyright Border Size 1-3
	 * 		[17] copybordercolor => (color hex) => Copyright Border Color
	 *  	[18] copyposition => (top | topright | topleft | center | left | right | bottom | bottomright | bottomleft) => Copyright Position
	 * 		[19] logoposition => (top | topright | topleft | center | left | right | bottom | bottomright | bottomleft) => Logo Image Position
	 * 		[20] logoimage => (String [ dirname/filename.extension] Allow Extension (PNG | GIF | JPG)) => Logo Image Root Path "PNG" OR "GIF" OR "JPG"
	 * 
	 * 
	 * 
	 * 
	 * -----------------------------------------------------------------------------------------
	 * $arg => string or array
	 * -----------------------------------------------------------------------------------------
	 * is Array keystring
	 * 		type => (POST | FILE)
	 * 		file => ({if POST Array file = $_FILES['yourfile']}|{if FILE false})
	 * 		path => ({if FILE String [ dirname/filename.extension ]})
	 * 		target => ({if FILE String [ dirname/filename.extension ]}) => Target File Root Path
	 * 		width => (integer)
	 * 		height => (integer)
	 * 		quality => (integer 1 - 100)
	 * 		action => (crop | resize)
	 * 		bordersize => (integer 0-5)
	 * 		bordercolor => (color hex)
	 * 		bgcolor => (color hex)
	 * 		copytext => (String)
	 * 		copycolor => (color hex)
	 * 		copyshadow => (color hex)
	 * 		copybgcolor => (color hex)
	 * 		copybgshadow => (color hex)
	 * 		copybordersize => (integer 0-5)
	 * 		copybordercolor => (color hex)
	 *  	copyposition => (top | topright | topleft | center | centerleft | centerright | bottom | bottomright | bottomleft)
	 * 		logoposition => (top | topright | topleft | center | centerleft | centerright | bottom | bottomright | bottomleft)
	 * 		logoimage => (String [ dirname/filename.extension] Allow Extension (PNG | GIF | JPG))
	 *
	 * -----------------------------------------------------------------------------------------
	 * is Array key integer
	 * 		[0] type => (POST | FILE)
	 * 		[1] file => ({if POST Array file = $_FILES['yourfile']}|{if FILE false})
	 * 		[2] path => ({if FILE String [ dirname/filename.extension ]})
	 * 		[3] target => ({if FILE String [ dirname/filename.extension ]}) => Target File Root Path
	 * 		[4] width => (integer)
	 * 		[5] height => (integer)
	 * 		[6] quality => (integer 1 - 100)
	 * 		[7] action => (crop | resize)
	 * 		[8] bordersize => (integer 0-5)
	 * 		[9] bordercolor => (color hex)
	 * 		[10] bgcolor => (color hex)
	 * 		[11] copytext => (String)
	 * 		[12] copycolor => (color hex)
	 * 		[13] copyshadow => (color hex)
	 * 		[14] copybgcolor => (color hex)
	 * 		[15] copybgshadow => (color hex)
	 * 		[16] copybordersize => (integer 0-5)
	 * 		[17] copybordercolor => (color hex)
	 *  	[18] copyposition => (top | topright | topleft | center | left | right | bottom | bottomright | bottomleft)
	 * 		[19] logoposition => (top | topright | topleft | center | left | right | bottom | bottomright | bottomleft)
	 * 		[20] logoimage => (String [ dirname/filename.extension] Allow Extension (PNG | GIF | JPG))
	 * 
	 * 
	 * -----------------------------------------------------------------------------------------
	 * is String
	 * 	STRING DECLERATIONS 
	 * 		"path,target,width,height,quality,action" 
	 * 	OR 
	 * 		"path=apthvalue&target=value&width=int&height=int&quality=int&action=(crop|resize)"
	 * 		
	 * 		Example 1
	 * 			$obj = new pg_image("source/source.jpg,newimage/resource.png,150,100,80,crop");
	 * 		
	 * 		Example 2
	 * 			$obj = new pg_image("path=source/source.jpg&target=newimage/resource.png&width=150&height=100&quality=80&action=crop");
	 * 
	 * 		[0] path => ({if FILE String [ dirname/filename.extension ]})
	 * 		[1] target => ({if FILE String [ dirname/filename.extension ]}) => Target File Root Path
	 * 		[2] width => (integer)
	 * 		[3] height => (integer)
	 * 		[4] quality => (integer 1 - 100)
	 * 		[5] action => (crop | resize)
	 * 
	 * 
	 * -----------------------------------------------------------------------------------------
	 * Position Options
	 * 		
	 * 		top
	 * 		topright
	 * 		topleft
	 * 		center
	 * 		left
	 * 		right
	 * 		bottom
	 * 		bottomright
	 * 		bottomleft
	 * 
	 * 		+------------------------------------------+
	 * 		|topleft------------top------------topright|
	 * 		|------------------------------------------|
	 * 		|------------------------------------------|
	 * 		|left--------------center-------------right|
	 * 		|------------------------------------------|
	 * 		|------------------------------------------|
	 * 		|bottomleft--------bottom-------bottomright|
	 * 		+------------------------------------------+
	 * 
	 * 
	 * -----------------------------------------------------------------------------------------
	 * Crop Option (Example)
	 * 		
	 * 		Orginal image width = 200px, height = 150px
	 * 		+--------------+
	 * 		|**************|
	 * 		|**************|
	 * 		|**************|
	 * 		|**************|
	 * 		+--------------+
	 * 
	 * 		Crop Size width = 150px, height = 100px
	 * 		+---------+
	 * 		|*********|
	 * 		|*********|
	 * 		|*********|
	 * 		+---------+
	 * 		
	 * 		Output size width = 150px, height = 100px
	 * 		+---------+
	 * 		|*********|
	 * 		|*********|
	 * 		|*********|
	 * 		+---------+
	 * 
	 * -----------------------------------------------------------------------------------------
	 * Resize Option (Example)
	 * 		
	 * 		Orginal image width = 200px, height = 150px
	 * 		+--------------+
	 * 		|**************|
	 * 		|**************|
	 * 		|**************|
	 * 		|**************|
	 * 		+--------------+
	 * 
	 * 		Resize Size width = 150px, height = 100px
	 * 		+---------+
	 * 		|*********|
	 * 		|*********|
	 * 		|*********|
	 * 		+---------+
	 * 		
	 * 		Output size width = 133px, height = 100px
	 * 		+-------+
	 * 		|*******|
	 * 		|*******|
	 * 		|*******|
	 * 		+-------+
	 * 
	 */
	class pg_image
	{
		
		var $var = false;
		var $arg;
		
		var $imgobj;
		var $fontsize = 8;
		var $copyfont = 'Arial';
		var $padding_top = 5;
		var $padding_bottom = 5;
		var $padding_left = 5;
		var $padding_right = 5;
		var $imgtip = 'true';
		
		/**
		 * Class Object Start Function
		 *
		 * @param array or string $arg
		 * @return pg_image
		 */
		function pg_image($arg){
			if(!$arg || $arg == '') return false;
			$this->arg = $arg;
			
			if(is_array($arg))
				$prarg = $this->ParseArgArray();
			else 
				$prarg = $this->ParseArgString();
			
			if(is_array($prarg))
				$this->var = $prarg;
			else
				return false;
				
			$acout = $this->startAction();
			if(!$acout)	
				return false;
			else 
				return true;
		}
		
		/**
		 * String Argument Parser
		 *
		 * @return Array
		 */
		function ParseArgString(){
			$a = $this->arg;
			if(!$a || $a == '') return false;
			if(is_array($a)) return false;
			
			if(eregi(",",$a)){
				$r = @ explode(",",$a,8);
				if(!is_array($r)) return false;
				$c = count($r);
				if($c != 6) return false;
				
				$filename = getimagesize($r[0]);
				$ow = $filename[0];
				$oh = $filename[1];
				$omim = $filename[6];
				$osize = '';
				$oname = $this->filename($r[0], 'filename');
				$oex = $this->filename($r[0], 'extension');
				$opath = $r[0];
								
				$var['source']['type'] = 'FILE';
				$var['source']['width'] = $ow;
				$var['source']['height'] = $oh;
				$var['source']['size'] = $osize;
				$var['source']['path'] = $opath;
				$var['source']['name'] = $oname;
				$var['source']['ex'] = $oex;
				
				$var['resource']['width'] = $r[2];
				$var['resource']['height'] = $r[3];
				$var['resource']['quality'] = $r[4];
				$var['resource']['path'] = $r[1];
				$var['resource']['name'] = $this->filename($var['resource']['path'], 'filename');
				$var['resource']['ex'] = $this->filename($var['resource']['path'], 'extension');
				$var['resource']['action'] = ($r[5] == 'crop')?'crop':'resize';
				
				return $var;

			}elseif (eregi("&",$a)){
				
				parse_str($a, $r);
				if(!is_array($r)) return false;
			
				$filename = getimagesize($r['path']);
				$ow = $filename[0];
				$oh = $filename[1];
				$omim = $filename[6];
				$osize = '';
				$oname = $this->filename($r['path'], 'filename');
				$oex = $this->filename($r['path'], 'extension');
				$opath = $r['path'];
								
				$var['source']['type'] = 'FILE';
				$var['source']['width'] = $ow;
				$var['source']['height'] = $oh;
				$var['source']['size'] = $osize;
				$var['source']['path'] = $opath;
				$var['source']['name'] = $oname;
				$var['source']['ex'] = $oex;
				
				$var['resource']['width'] = $r['width'];
				$var['resource']['height'] = $r['height'];
				$var['resource']['quality'] = $r['quality'];
				$var['resource']['path'] = $r['target'];
				$var['resource']['name'] = $this->filename($var['resource']['path'], 'filename');
				$var['resource']['ex'] = $this->filename($var['resource']['path'], 'extension');
				$var['resource']['action'] = ($r['action'] == 'crop')?'crop':'resize';
				return $var;
			}else return false;
		}

		/**
		 * Array Arguments Parser
		 *
		 * @return Array
		 */
		function ParseArgArray(){
			$a = $this->arg;
			if(!is_array($a)) return false;
			
			if(array_key_exists('file', $a)){
				
				if($a['type'] == 'POST'){
					$filename = getimagesize($a['file']['tmp_name']);
					$ow = $filename[0];
					$oh = $filename[1];
					$omim = $filename[6];
					$osize = $a['file']['size'];
					$oname = $this->filename($a['file']['name'], 'filename');
					$oex = $this->filename($a['file']['name'], 'extension');
					$opath = $a['file']['tmp_name'];
				}else{
					$filename = getimagesize($a['path']);
					$ow = $filename[0];
					$oh = $filename[1];
					$omim = $filename[6];
					$osize = $a['file']['size'];
					$oname = $this->filename($a['path'], 'filename');
					$oex = $this->filename($a['path'], 'extension');
					$opath = $a['path'];
				}
								
				$var['source']['type'] = $a['type'];
				$var['source']['width'] = $ow;
				$var['source']['height'] = $oh;
				$var['source']['size'] = $osize;
				$var['source']['path'] = $opath;
				$var['source']['file'] = $a['file'];
				$var['source']['name'] = $oname;
				$var['source']['ex'] = $oex;
				
				$var['resource']['width'] = $a['width'];
				$var['resource']['height'] = $a['height'];
				$var['resource']['quality'] = $a['quality'];
				$var['resource']['path'] = $a['target'];
				$var['resource']['name'] = $this->filename($var['resource']['path'], 'filename');
				$var['resource']['ex'] = $this->filename($var['resource']['path'], 'extension');
				$var['resource']['action'] = ($a['action'] == 'crop')?'crop':'resize';
				$var['resource']['bordersize'] = $a['bordersize'];
				$var['resource']['bordercolor'] = $a['bordercolor'];
				$var['resource']['bgcolor'] = $a['bgcolor'];
				
				$var['copyright']['text'] = $a['copytext'];
				$var['copyright']['color'] = $a['copycolor'];
				$var['copyright']['shadow'] = $a['copyshadow'];
				$var['copyright']['bgcolor'] = $a['copybgcolor'];
				$var['copyright']['bgshadow'] = $a['copybgshadow'];
				$var['copyright']['bordersize'] = $a['copybordersize'];
				$var['copyright']['bordercolor'] = $a['copybordercolor'];
				$var['copyright']['position'] = $a['copyposition'];
				
				$var['logo']['position'] = $a['logoposition'];
				$var['logo']['image'] = $a['logoimage'];
				
				return $var;
			}elseif (array_key_exists(0, $a)){
				
				if($a[0] == 'POST'){
					$filename = getimagesize($a[1]['tmp_name']);
					$ow = $filename[0];
					$oh = $filename[1];
					$omim = $filename[6];
					$osize = $a[1]['size'];
					$oname = $this->filename($a[1]['name'], 'filename');
					$oex = $this->filename($a[1]['name'], 'extension');
					$opath = $a[1]['tmp_name'];
				}else{
					$filename = getimagesize($a[2]);
					$ow = $filename[0];
					$oh = $filename[1];
					$omim = $filename[6];
					$osize = $a[1]['size'];
					$oname = $this->filename($a[2], 'filename');
					$oex = $this->filename($a[2], 'extension');
					$opath = $a[2];
				}
								
				$var['source']['type'] = $a[0];
				$var['source']['width'] = $ow;
				$var['source']['height'] = $oh;
				$var['source']['size'] = $osize;
				$var['source']['path'] = $opath;
				$var['source']['file'] = $a[1];
				$var['source']['name'] = $oname;
				$var['source']['ex'] = $oex;
				
				$var['resource']['width'] = $a[4];
				$var['resource']['height'] = $a[5];
				$var['resource']['quality'] = $a[6];
				$var['resource']['path'] = $a[3];
				$var['resource']['name'] = $this->filename($var['resource']['path'], 'filename');
				$var['resource']['ex'] = $this->filename($var['resource']['path'], 'extension');
				$var['resource']['action'] = ($a[7] == 'crop')?'crop':'resize';
				$var['resource']['bordersize'] = $a[8];
				$var['resource']['bordercolor'] = $a[9];
				$var['resource']['bgcolor'] = $a[10];
				
				$var['copyright']['text'] = $a[11];
				$var['copyright']['color'] = $a[12];
				$var['copyright']['shadow'] = $a[13];
				$var['copyright']['bgcolor'] = $a[14];
				$var['copyright']['bgshadow'] = $a[15];
				$var['copyright']['bordersize'] = $a[16];
				$var['copyright']['bordercolor'] = $a[17];
				$var['copyright']['position'] = $a[18];
				
				$var['logo']['position'] = $a[19];
				$var['logo']['image'] = $a[20]; 
				
				return $var;
			}else return false;
		}
		
		/**
		 * File Name Parser function
		 *
		 * @param url string $s file name path
		 * @param string $op parse option dirname | basename | extension | filename
		 * @return string option out
		 */
		function filename($s, $op = 'filename'){
			if(!$s || $s == '') return false;
			if(!$op || $op == '') return false;
			if(!eregi('^(dirname)|(basename)|(extension)|(filename)$',$op)) return false;
			$r = pathinfo($s);
			return $r[$op];
		}
		
		
		/**
		 * Image resize or crop selection and start action function
		 *
		 * @return ture or false
		 */
		function startAction(){
			$v = $this->var;
			if(!is_array($v)) return false;
			if($v['resource']['action'] == 'crop')
				return $this->startCrop();
			else if($v['resource']['action'] == 'resize')
				return $this->startResize();
			else
				return false;			
		}
		
		/**
		 * Image Resizing function
		 *
		 * @return ture or false
		 */
		function startResize(){
			$v = $this->var;
			if(!is_array($v)) return false;
			
			$sw = $v['source']['width'];
			$sh = $v['source']['height'];
			$nw = $v['resource']['width'];
			$nh = $v['resource']['height'];
			$sp = $v['source']['path'];
			if($sw == 0) $sw = 1;
			$ratio=($sh/$sw);
   			if ($sw > $nw || $sh > $nh) {
     			if ($sw > $nw) {
         			$sw_resize = $nw;
         			$sh_resize = $sw_resize*$ratio;
     			}else{
       				$sw_resize = $sw;
       				$sh_resize = $sh;
     			}       
     			
     			if ($sh_resize > $nh) {
       				$sh_resize=$nh;
       				$sw_resize=$sh_resize/$ratio;
     			}      
   			}else{
   				$sh_resize = $sh;
   				$sw_resize = $sw;
   			}
			
			$this->createImage(false, $sw_resize, $sh_resize);
			$this->getBackground($v['resource']['bgcolor']);
				
			$source = $this->sourceImage($v['source']['path'], $v['source']['ex']);
			
			@ imagecopyresized($this->imgobj, $source, 0, 0, 0, 0, $sw_resize, $sh_resize, $sw, $sh);
			
			$this->setCopyright($sw_resize, $sh_resize);
			$this->setLogo($sw_resize, $sh_resize);
			$this->setBorder($sw_resize, $sh_resize);
			
			$out = $this->saveImage();
			if($out)
				return true;
			else 
				return false;
						
		}
		
		/**
		 * Image Croping function
		 *
		 * @return ture or false
		 */
		function startCrop(){
			$v = $this->var;
			if(!is_array($v)) return false;
			
			$sw = $v['source']['width'];
			$sh = $v['source']['height'];
			$nw = $v['resource']['width'];
			$nh = $v['resource']['height'];
			$sp = $v['source']['path'];
			if($sw == 0) $sw = 1;
			$this->createImage(false, $nw, $nh);
			$this->getBackground($v['resource']['bgcolor']);
			
			$sourceShape = $this->getShape($sw, $sh);
			
			$nw_offset = $nw+2;
			$nh_offset = $nh+2;	
			
			$ratio=($sh/$sw);
   			if ($sw > $nw || $sh > $nh) {
   				if($sourceShape == 1){
					$sh_resize = $nh_offset;
					$sw_resize = $sh_resize/$ratio;
				}
				
				if($sourceShape == 2 || $sourceShape == 3){
					$sw_resize = $nw_offset;
					$sh_resize = $sw_resize*$ratio;
				}
				
				if($sw_resize == 0) $sw_resize = 1;
				$xratio=($sh_resize/$sw_resize);
				if($sw_resize < $nw_offset){
					$sw_resize = $nw_offset;
					$sh_resize = $sw_resize*$ratio;
				}
				
				if($sh_resize < $nh_offset){
					$sh_resize = $nh_offset;
					$sw_resize = $sh_resize/$ratio;
				}
   			}else{
   				$sh_resize = $sh;
   				$sw_resize = $sw;
   			}
					  			
			$x_offset = ceil(($nw/2)-($sw_resize/2));
			$y_offset = ceil(($nh/2)-($sh_resize/2));
				
			$source = $this->sourceImage($v['source']['path'], $v['source']['ex']);
			
			@ imagecopyresized($this->imgobj, $source, $x_offset, $y_offset, 0, 0, $sw_resize, $sh_resize, $sw, $sh);
			
			$this->setCopyright($nw, $nh);
			$this->setLogo($nw, $nh);
			$this->setBorder($nw, $nh);
			
			$out = $this->saveImage();
			if($out)
				return true;
			else 
				return false;
						
		}
		
		/**
		 * Image Save Function
		 *
		 * @return true or false
		 */
		function saveImage(){
			if(!$this->imgobj) return false;
			$var = $this->var;
			$q = $var['resource']['quality'];
			$q = ($q <= 50)?50:(($q >= 100)?100:80);
			if($var['resource']['path'] != ''){
				$resource = $var['resource']['path'];
				$e = explode('.', $resource);
				$ext = $e[count($e)-1];
				if(!$ext){
					@ header("Content-Type: image/png");
					@ ImagePng($this->imgobj);
					@ imagedestroy($this->imgobj);
				}else if(eregi("^(png)|(PNG)$", $ext)){
					@ ImagePng($this->imgobj, $resource, $q);
					@ imagedestroy($this->imgobj);
				}else if(eregi("^(jpg)|(JPG)|(JPEG)$", $ext)){
					@ imagejpeg($this->imgobj, $resource, $q);
					@ imagedestroy($this->imgobj);
				}else if(eregi("^(gif)|(GIF)$", $ext)){
					@ imagegif($this->imgobj, $resource, $q);
					@ imagedestroy($this->imgobj);
				}else{
					@ header("Content-Type: image/png");
					@ ImagePng($this->imgobj);
					@ imagedestroy($this->imgobj);
				}
			}else{
				$ext = $this->imgtip;
				if(!$ext){
					@ header("Content-Type: image/png");
					@ ImagePng($this->imgobj);
					@ imagedestroy($this->imgobj);
				}else if(eregi("^(png)|(PNG)$", $ext)){
					@ header("Content-Type: image/png");
					@ ImagePng($this->imgobj);
					@ imagedestroy($this->imgobj);
				}else if(eregi("^(jpg)|(JPG)|(JPEG)$", $ext)){
					@ header("Content-Type: image/jpeg");
					@ imagejpeg($this->imgobj);
					@ imagedestroy($this->imgobj);
				}else if(eregi("^(gif)|(GIF)$", $ext)){
					@ header("Content-Type: image/gif");
					@ imagegif($this->imgobj);
					@ imagedestroy($this->imgobj);
				}else{
					@ header("Content-Type: image/png");
					@ ImagePng($this->imgobj);
					@ imagedestroy($this->imgobj);
				}
			}
			return true;
		}
		
		/**
		 * Image Object Creator
		 *
		 * @param string $root file root
		 * @param int $w image width
		 * @param int $h image height
		 * @return imgobj
		 */
		function createImage($root = false, $w = false, $h = false){
			if($root)
				$ext = $this->filename($root,'extension');
			if(!$ext && $w && $h){
				$imgobj = @ imagecreatetruecolor($w, $h);
				$this->imgtip = 'true';
			}else if(eregi("^(png)|(PNG)$", $ext)){
				$imgobj = @ imagecreatefrompng($root);
				$this->imgtip = 'png';
			}else if(eregi("^(jpg)|(JPG)|(JPEG)$", $ext)){
				$imgobj = @ imagecreatefromjpeg($root);
				$this->imgtip = 'jpg';
			}else if(eregi("^(gif)|(GIF)$", $ext)){
				$imgobj = @ imagecreatefromgif($root);
				$this->imgtip = 'gif';
			}else{
				$imgobj = false;
				$this->imgtip = false;
			}
			if($imgobj) @ imagealphablending($imgobj, 1);
			$this->imgobj = $imgobj;
			
			return $imgobj;
		}
		
		/**
		 * Source Image Create
		 *
		 * @param string $root
		 * @return obj
		 */
		function sourceImage($root, $ext = false){
			if($root && !$ext)
				$ext = $this->filename($root,'extension');			
			if(eregi("^(png)|(PNG)$", $ext))
				$imgobj = @ imagecreatefrompng($root);
			else if(eregi("^(jpg)|(JPG)|(JPEG)$", $ext))
				$imgobj = @ imagecreatefromjpeg($root);
			else if(eregi("^(gif)|(GIF)$", $ext))
				$imgobj = @ imagecreatefromgif($root);
			else
				$imgobj = false;
			
			@ imagealphablending($imgobj, 1);
			return $imgobj;
		}
		
		/**
		 * Set Border on the image
		 *
		 * @param int $w new image width
		 * @param int $h new image height
		 * @return true or false
		 */
		function setBorder($w, $h){
			$v = $this->var;
			if(!is_array($v)) return false;
			if($v['resource']['bordersize'] <= 0) return false;
			
			$bs = $v['resource']['bordersize'];
			if(is_array($this->rgb2hex2rgb($v['resource']['bordercolor'])))
				$bordercolor = $this->getColor($v['resource']['bordercolor']);
			else 
				$bordercolor = $this->getColor("#000000");
			
			$x = 0;
			$y = 0;
			//$bs = 10;
				
			//top
			$top = array(		$x, $y,
           						$x, ($y+$bs),
           						($x+$w),($y+$bs),
								($x+$w),$y
           				);
			@ imagefilledpolygon($this->imgobj, $top, (count($top)/2), $bordercolor);
						
			//Left
			$left = array(		$x, $y,
           						$x, ($y+$h),
           						($x+$bs),($y+$h),
								($x+$bs),$y
           					);
			@ imagefilledpolygon($this->imgobj, $left, (count($left)/2), $bordercolor);
			
			//Right
			$bs += 1;
			$right = array(		($x+($w-$bs)), $y,
           						($x+($w-$bs)), ($y+$h),
           						($x+$w),($y+$h),
								($x+$w),$y
           					);
			@ imagefilledpolygon($this->imgobj, $right, (count($right)/2), $bordercolor);
			
			//Bottom
			$bottom = array(	$x, ($y+($h-$bs)),
           						$x, ($y+$h),
           						($x+$w),($y+$h),
								($x+$w),($y+($h-$bs))
           					);
			@ imagefilledpolygon($this->imgobj, $bottom, (count($bottom)/2), $bordercolor);
			
			return true;
		}
		
		/**
		 * Set external logo on the image
		 *
		 * @param int $w new image width
		 * @param int $h new image height
		 * @return true or false
		 */
		function setLogo($w, $h){
			$v = $this->var;
			if(!is_array($v)) return false;
			if($v['logo']['image'] == '' || !file_exists($v['logo']['image'])) return false;
			
			$filename = getimagesize($v['logo']['image']);
			$width = $filename[0];
			$height = $filename[1];
			
			$position = $this->getPositon($v['logo']['position'], $w, $h, $width, $height);
			
			$logo = $this->sourceImage($v['logo']['image']);
			if(!$logo) return false;
			
			@ imageCopyMerge($this->imgobj, $logo, $position['x'], $position['y'], 0, 0, $width, $height,100);
			
			return true;
		}
		
		/**
		 * Set Copyright write to on the image
		 *
		 * @param int $w new image width
		 * @param int $h new image height
		 * @return ture or false
		 */
		function setCopyright($w, $h){
			$v = $this->var;
			
			if(!is_array($v)) return false;
			if($v['copyright']['text'] == '') return false;
			
			
			$box = @ imagettfbbox(($this->fontsize), 0, $this->copyfont, $v['copyright']['text']);
			$height = abs($box[5]-$box[1])+10;
			$width = abs($box[4]-$box[0])+10;
   			$bg_position = $this->getPositon($v['copyright']['position'], $w, $h, $width, $height);
			
			$x = $bg_position['x'];
			$y = $bg_position['y'];
			
			$bgshadow = $this->rgb2hex2rgb($v['copyright']['bgshadow']);
			if(is_array($bgshadow)){
				$bgshadow_coordinate = array(	$x, $y,
           										$x, ($y+$height+2),
           										($x+$width+2),($y+$height+2),
												($x+$width+2),$y
           									);
				@ imagefilledpolygon($this->imgobj, $bgshadow_coordinate, (count($bgshadow_coordinate)/2), $this->getColor($v['copyright']['bgshadow']));
			}
			
			$bgcolor = $this->rgb2hex2rgb($v['copyright']['bgcolor']);
			if(is_array($bgcolor)){				
				$bg_coordinate = array(	$x, $y,
           								$x, ($y+$height),
           								($x+$width),($y+$height),
										($x+$width),$y
           								);
				@ imagefilledpolygon($this->imgobj, $bg_coordinate, (count($bg_coordinate)/2), $this->getColor($v['copyright']['bgcolor']));
			}
			
			if($v['copyright']['bordersize'] > 0){
				$bs = $v['copyright']['bordersize'];
				if(is_array($this->rgb2hex2rgb($v['copyright']['bordercolor'])))
					$bordercolor = $this->getColor($v['copyright']['bordercolor']);
				else 
					$bordercolor = $this->getColor("#000000");

				//top
				$top = array(		$x, $y,
	           						$x, ($y+$bs),
	           						($x+$width),($y+$bs),
									($x+$width),$y
	           				);
				@ imagefilledpolygon($this->imgobj, $top, (count($top)/2), $bordercolor);
							
				//Left
				$left = array(		$x, $y,
	           						$x, ($y+$height),
	           						($x+$bs),($y+$height),
									($x+$bs),$y
	           					);
	           					
				@ imagefilledpolygon($this->imgobj, $left, (count($left)/2), $bordercolor);
				
				//Right
				//$bs += 1;
				$right = array(		($x+($width-$bs)), $y,
	           						($x+($width-$bs)), ($y+$height),
	           						($x+$width),($y+$height),
									($x+$width),$y
	           					);
				@ imagefilledpolygon($this->imgobj, $right, (count($right)/2), $bordercolor);
				
				//Bottom
				$bottom = array(	$x, ($y+($height-$bs)),
	           						$x, ($y+$height),
	           						($x+$width),($y+$height),
									($x+$width),($y+($height-$bs))
	           					);
				@ imagefilledpolygon($this->imgobj, $bottom, (count($bottom)/2), $bordercolor);
			}
			
			if($v['copyright']['text'] != ''){
				$text_color = $this->rgb2hex2rgb($v['copyright']['color']);
				$totalcolor = ($bgcolor[0]+$bgcolor[1]+$bgcolor[2]);
				if(is_array($text_color)){
					$color = $v['copyright']['color'];
				}else if ($totalcolor <= 380) {
					$color = '#FFFFFF';
				}else if ($totalcolor > 380) {
					$color = '#000000';
				}else {
					$color = '#000000';
				}
				$tw = abs($box[4]-$box[0]);
				$tx = ($x+ceil((($width)/2) - (($tw)/2)));
				$ty = ($y+ceil($height/2)+5);
				$shadow = $this->rgb2hex2rgb($v['copyright']['shadow']);
				if(is_array($shadow)){
					@ imagettftext($this->imgobj, $this->fontsize, 0, $tx+1, $ty+1, $this->getColor($v['copyright']['shadow']), $this->copyfont, $v['copyright']['text']);
				}
				@ imagettftext($this->imgobj, $this->fontsize, 0, $tx, $ty, $this->getColor($color), $this->copyfont, $v['copyright']['text']);
			}
			
			return true;
			
		}
		
		function getPositon($pos, $w, $h, $ow, $oh){
			if($pos == 'topleft'){
				$x = $this->padding_left;
				$y = $this->padding_top;
			}elseif ($pos == 'topright'){
				$x = ($w-($ow+$this->padding_right));
				$y = $this->padding_top;
			}elseif ($pos == 'top'){
				$x = ceil((($w-$this->padding_left)/2)-($ow/2));
				$y = $this->padding_top;
			}elseif ($pos == 'left'){
				$x = $this->padding_left;
				$y = ceil((($h-$this->padding_top)/2)-($oh/2));
			}elseif ($pos == 'right'){
				$x = ($w-($ow+$this->padding_right));
				$y = ceil((($h-$this->padding_top)/2)-($oh/2));
			}elseif ($pos == 'center'){
				$x = ceil((($w-$this->padding_left)/2)-($ow/2));
				$y = ceil((($h-$this->padding_top)/2)-($oh/2));
			}elseif ($pos == 'bottomleft') {
				$x = $this->padding_left;
				$y = ($h-($oh+$this->padding_bottom));
			}elseif ($pos == 'bottomright') {
				$x = ($w-($ow+$this->padding_right));
				$y = ($h-($oh+$this->padding_bottom));
			}elseif ($pos == 'bottom') {
				$x = ceil((($w-$this->padding_left)/2)-($ow/2));
				$y = ($h-($oh+$this->padding_bottom));
			}else {
				$x = 2;
				$y = 2;
			}
			
			return array(x=>$x, y=>$y);
		}
		
		/**
		 * Set Main background color
		 *
		 * @param hex dec $color
		 * @return true false
		 */
		function getBackground($color){
			if(!$color) return false;
			$c = $this->getColor($color);
			if(!$c) return false;
			@ imagefill($this->imgobj, 0, 0, $c);
		}
		
		/**
		 * Get Color Obj
		 *
		 * @param hex dec $color
		 * @return obj
		 */
		function getColor($color){
			if(!$color) return false;
			$c = $this->rgb2hex2rgb($color);
			if(!is_array($c)) return false;
			return @ imagecolorallocate($this->imgobj, $c['r'], $c['g'], $c['b']);
		}
		
		/**
		 * RGB to HEX - HEX to RGB
		 *
		 * @param hex dec $c
		 * @return array hex dec
		 */
		function rgb2hex2rgb($c){
			if(!$c) return false;
			$c = trim($c);
			$out = false;
			if(eregi("^[0-9ABCDEFabcdef#]+$", $c)){
				$c = str_replace('#','', $c);
				$l = strlen($c);
				if($l == 3){
					unset($out);
					$out[0] = $out['r'] = $out['red'] = hexdec(substr($c, 0,1));
					$out[1] = $out['g'] = $out['green'] = hexdec(substr($c, 1,1));
					$out[2] = $out['b'] = $out['blue'] = hexdec(substr($c, 2,1));
				}elseif($l == 6){
					unset($out);
					$out[0] = $out['r'] = $out['red'] = hexdec(substr($c, 0,2));
					$out[1] = $out['g'] = $out['green'] = hexdec(substr($c, 2,2));
					$out[2] = $out['b'] = $out['blue'] = hexdec(substr($c, 4,2));
				}else $out = false;
				
			}elseif (eregi("^[0-9]+(,| |.)+[0-9]+(,| |.)+[0-9]+$", $c)){
				if(eregi(",", $c))
					$e = explode(",",$c);
				else if(eregi(" ", $c))
					$e = explode(" ",$c);
				else if(eregi(".", $c))
					$e = explode(".",$c);
				else return false;
				
				if(count($e) != 3) return false;
				
				$out = '#';
				for($i = 0; $i<3; $i++)
					$e[$i] = dechex(($e[$i] <= 0)?0:(($e[$i] >= 255)?255:$e[$i]));
				
				for($i = 0; $i<3; $i++)
					$out .= ((strlen($e[$i]) < 2)?'0':'').$e[$i];
					
				$out = strtoupper($out);
			}else $out = false;
			
			return $out;
		}
		
		/**
		 * Image Shape Return
		 *
		 * @param int $w image width
		 * @param int $h image height
		 * @return int 1=>horizontal , 2=>vertical , 3=>square , 0=>unknown
		 */
		function getShape($w, $h){
			if($w > $h)
				return 1;
			elseif ($w < $h)
				return 2;
			elseif ($w == $h)
				return 3;
			else return 0;
		}
	}
	
?>