Julio Montoya 13 years ago
parent
commit
2a112b3db9

+ 797 - 794
main/inc/lib/fckeditor/editor/plugins/ajaxfilemanager/inc/class.image.php

@@ -1,795 +1,798 @@
-<?php
-/**
- * this class provide functions to edit an image, e.g. resize, rotate, flip, crop
- * @author Logan Cai cailongqun [at] yahoo [dot] com [dot] cn
- * @link  www.phpletter.com
- * @version 0.9
- * @since 14/May/2007
- * @name Image
- * 
- */
-	
-class ImageAjaxFileManager
-{
-	var $_debug = false;
-	var $_errors = array();
-	var $gdInfo = array(); //keep all information of GD extension
-	var $_imgOrig = null; //the hanlder of original image
-	var $_imgFinal = null; //the handler of final image
-	var $imageFile  = null;
-	var $transparentColorRed = null;
-	var $transparentColorGreen = null;
-	var $transparentColorBlue = null;
-	var $chmod = 0755;
-	var $_imgInfoOrig = array(
-	    	'name'=>'',
-	    	'ext'=>'',
-	    	'size'=>'',
-	    	'width'=>'',
-	    	'height'=>'',
-	    	'type'=>'',
-	    	'path'=>'',
-	);
-	var $_imgInfoFinal = array(
-		'name'=>'',
-		'ext'=>'',
-		'size'=>'',
-		'width'=>'',
-		'height'=>'', 
-		'type'=>'',   
-		'path'=>'',
-	);
-	var $_imgQuality = 90;
-	/**
-	 * constructor
-	 *
-	 * @param boolean $debug
-	 * @return Image
-	 */
-	
-	function __construct($debug = false)
-	{
-		$this->enableDebug($debug);
-		$this->gdInfo = $this->getGDInfo();
-	}
-	function Image($debug = false)
-	{
-		$this->__construct($debug);
-	}
-	/**
-	 * enable to debug
-	 *
-	 * @param boolean $value
-	 */
-	function enableDebug($value)
-	{
-		$this->_debug = ($value?true:false);
-	}
-	/**
-	 * check if debug enable
-	 * @return boolean
-	 */
-	function _isDebugEnable()
-	{
-		return $this->_debug;
-	}
-	
-	/**
-	 * append to errors array and shown the each error when the debug turned on
-	 *
-	 * @param  string $string
-	 * @return void
-     * @access private
-     * @copyright this function originally come from Andy's php 
-	 */
-    function _debug($value)
-    {
-    		$this->_errors[] = $value;
-        if ($this->_debug) 
-        {
-            echo $value . "<br />\n";
-        }
-    }		
-    /**
-     * show erros
-     *
-     */
-    function showErrors()
-    {
-    	if(sizeof($this->_errors))
-    	{
-    		foreach($this->_errors as $error)
-    		{
-    			echo $error . "<br />\n";
-    		}
-    	}
-    }
-    /**
-     * Load an image from the file system.
-     * 
-     * @param  string $filename
-     * @return bool 
-     * @access public
-     * @copyright this function originally come from Andy's php 
-     */
-    function loadImage($filename) {
-        $ext  = strtolower($this->_getExtension($filename));
-        $func = 'imagecreatefrom' . ($ext == 'jpg' ? 'jpeg' : $ext);
-        if (!$this->_isSupported($filename, $ext, $func, false)) {
-            return false;
-        }
-        if($ext == "gif") {
-             // the following part gets the transparency color for a gif file
-            // this code is from the PHP manual and is written by
-            // fred at webblake dot net and webmaster at webnetwizard dotco dotuk, thanks!
-            $fp = @fopen($filename, "rb");
-            $result = @fread($fp, 13);
-            $colorFlag = ord(substr($result,10,1)) >> 7;
-            $background = ord(substr($result,11));
-            if ($colorFlag) {
-                $tableSizeNeeded = ($background + 1) * 3;
-                $result = @fread($fp, $tableSizeNeeded);
-                $this->transparentColorRed = ord(substr($result, $background * 3, 1));
-                $this->transparentColorGreen = ord(substr($result, $background * 3 + 1, 1));
-                $this->transparentColorBlue = ord(substr($result, $background * 3 + 2, 1));
-            }
-            fclose($fp);
-            // -- here ends the code related to transparency handling   	
-        }
-        $this->_imgOrig = @$func($filename);
-        if ($this->_imgOrig == null) {
-            $this->_debug("The image could not be created from the '$filename' file using the '$func' function.");
-            return false;
-        }else 
-        {
-        	$this->imageFile = $filename;
-			    $this->_imgInfoOrig = array(
-			    	'name'=>basename($filename),
-			    	'ext'=>$ext,
-			    	'size'=>filesize($filename),
-			    	'path'=>$filename,
-			    );        	
-			    $imgInfo = $this->_getImageInfo($filename);
-			    if(sizeof($imgInfo))
-			    {
-			    	foreach($imgInfo as $k=>$v)
-			    	{
-			    		$this->_imgInfoOrig[$k] = $v;
-			    		$this->_imgInfoFinal[$k] = $v;
-			    	}
-			    }
-			    
-        }
-        return true;
-    }
-
-    /**
-     * Load an image from a string (eg. from a database table)
-     * 
-     * @param  string $string
-     * @return bool 
-     * @access public
-     * @copyright this function originally come from Andy's php 
-     */
-    function loadImageFromString($string)
-    {
-    		$this->imageFile = $filename;
-        $this->_imgOrig = imagecreatefromstring($string);
-        if (!$this->_imgOrig) {
-            $this->_debug('The image (supplied as a string) could not be created.');
-            return false;
-        }
-        return true;
-    }		
-    
-
-    /**
-     * Save the modified image
-     * 
-     * @param  string $filename 
-     * @param  int    $quality 
-     * @param  string $forcetype 
-     * @return bool 
-     * @access public
-     * @copyright this function originally come from Andy's php 
-     */
-    function saveImage($filename, $quality = 90, $forcetype = '')
-    {
-        if ($this->_imgFinal == null) {
-            $this->_debug('No changes intend to be made.');
-            return false;
-        }
-
-        $ext  = ($forcetype == '') ? $this->_getExtension($filename) : strtolower($forcetype);
-        $func = 'image' . ($ext == 'jpg' ? 'jpeg' : $ext);
-        if (!$this->_isSupported($filename, $ext, $func, true)) 
-        {
-            return false;
-        }
-        $saved = false;
-        switch($ext) 
-        {
-            case 'gif':
-                if ($this->gdInfo['Truecolor Support'] && imageistruecolor($this->_imgFinal)) 
-                {
-                    imagetruecolortopalette($this->_imgFinal, false, 255);
-                }
-            case 'png':
-                $saved = $func($this->_imgFinal, $filename);
-                break;
-            case 'jpg':
-                $saved = $func($this->_imgFinal, $filename, $quality);
-                break;
-        }
-
-        if ($saved === false) 
-        {
-            $this->_debug("The image could not be saved to the '$filename' file as the file type '$ext' using the '$func' function.");
-            return false;
-        }else 
-        {
-        	$this->_imgInfoFinal['size'] = @filesize($filename);
-        	@chmod($filename, intval($this->chmod, 8));
-        }
-
-        return true;
-    }    
-    /**
-     * Shows the masked image without any saving
-     * 
-     * @param  string $type 
-     * @param  int    $quality 
-     * @return bool 
-     * @access public
-     * @copyright this function originally come from Andy's php 
-     */
-    function showImage($type = '', $quality = '')
-    {
-        if ($this->_imgFinal == null) {
-            $this->_debug('There is no cropped image to show.');
-            return false;
-        }
-        $type = (!empty($type)?$type:$this->_imgInfoOrig['ext']);
-        $quality = (!empty($quality)?$quality:$this->_imgQuality);
-				
-        $type = strtolower($type);
-        $func = 'image' . ($type == 'jpg' ? 'jpeg' : $type);
-        $head = 'image/' . ($type == 'jpg' ? 'jpeg' : $type);
-        
-        if (!$this->_isSupported('[showing file]', $type, $func, false)) {
-            return false;
-        }
-
-        header("Content-type: $head");
-        switch($type) 
-        {
-            case 'gif':
-                if ($this->gdInfo['Truecolor Support'] && imageistruecolor($this->_imgFinal)) 
-                {
-                    @imagetruecolortopalette($this->_imgFinal, false, 255);
-                }
-            case 'png':
-                $func($this->_imgFinal);
-                break;
-            case 'jpg':
-                $func($this->_imgFinal, '', $quality);
-                break;
-        }
-        return true;
-    }    
-    
-    /**
-	 * Used for cropping image
-	 * 
-	 * @param  int $dst_x
-	 * @param  int $dst_y
-	 * @param  int $dst_w
-	 * @param  int $dst_h
-	 * @return bool
-     * @access public
-     * @copyright this function originally come from Andy's php 
-	 */  
-    function crop($dst_x, $dst_y, $dst_w, $dst_h)
-    {
-        if ($this->_imgOrig == null) {
-            $this->_debug('The original image has not been loaded.');
-            return false;
-        }
-        if (($dst_w <= 0) || ($dst_h <= 0)) {
-            $this->_debug('The image could not be cropped because the size given is not valid.');
-            return false;
-        }
-        if (($dst_w > imagesx($this->_imgOrig)) || ($dst_h > imagesy($this->_imgOrig))) {
-            $this->_debug('The image could not be cropped because the size given is larger than the original image.');
-            return false;
-        }
-        $this->_createFinalImageHandler($dst_w, $dst_h);
-        if ($this->gdInfo['Truecolor Support']) 
-        {
-            	if(!@imagecopyresampled($this->_imgFinal, $this->_imgOrig, 0, 0, $dst_x, $dst_y, $dst_w, $dst_h, $dst_w, $dst_h))
-            	{
-            		$this->_debug('Unable crop the image.');
-            		return false;
-            	}            
-        } else 
-        {
-          	if(!@imagecopyresized($this->_imgFinal, $this->_imgOrig, 0, 0, $dst_x, $dst_y, $dst_w, $dst_h, $dst_w, $dst_h))
-          	{
-           		$this->_debug('Unable crop the image.');
-          		return false;           		
-          	}
-            
-        }
-        $this->_imgInfoFinal['width'] = $dst_w;
-        $this->_imgInfoFinal['height'] = $dst_h;   
-        return true; 	
-    }
-  
-    
-	/**
-     * Resize the Image in the X and/or Y direction
-     * If either is 0 it will be scaled proportionally
-     *
-     * @access public
-     *
-     * @param mixed $new_x 
-     * @param mixed $new_y 
-     * @param boolean $constraint keep to resize the image proportionally
-     * @param boolean $unchangeIfsmaller keep the orignial size if the orignial smaller than the new size
-     * 
-     *
-     * @return mixed none or PEAR_error
-     */
-	function resize( $new_x, $new_y, $constraint= false, $unchangeIfsmaller=false)
-	{
-		if(!$this->_imgOrig)
-		{
-			$this->_debug('No image fould.');
-			return false;
-		}		
-		
-		$new_x = intval($new_x);
-		$new_y = intval($new_y);
-		if($new_x <=0 || $new_y <= 0)
-		{
-			$this->_debug('either of new width or height can be zeor or less.');
-		}else 
-		{
-		
-			if($constraint)
-			{
-				if($new_x < 1 && $new_y < 1)
-				{
-					$new_x = $this->_imgInfoOrig['width'];
-					$new_y = $this->_imgInfoOrig['height'];
-				}elseif($new_x < 1)
-				{
-					$new_x = floor($new_y / $this->_imgInfoOrig['height'] * $this->_imgInfoOrig['width']);
-	
-				}elseif($new_y < 1)
-				{
-					$new_y = floor($new_x / $this->_imgInfoOrig['width'] * $this->_imgInfoOrig['height']);
-				}else
-				{
-					$scale = min($new_x/$this->_imgInfoOrig['width'], $new_y/$this->_imgInfoOrig['height']) ;
-					$new_x = floor($scale*$this->_imgInfoOrig['width']);
-					$new_y = floor($scale*$this->_imgInfoOrig['height']);
-				}						
-			}
-			if($unchangeIfsmaller)
-			{
-				if($this->_imgInfoOrig['width'] < $new_x && $this->_imgInfoOrig['height'] < $new_y )
-				{
-					$new_x = $this->_imgInfoOrig['width'];
-					$new_y = $this->_imgInfoOrig['height'];
-				}
-			}
-		
-			
-			
-			if(is_null($this->_imgOrig))
-			{
-				$this->loadImage($filePath);
-			}
-			if(sizeof($this->_errors) == 0)
-			{
-				return $this->_resize($new_x, $new_y);
-			}			
-		}
-
-		return false;
-		
-	} // End resize    
- 	/**
-     * resize the image and return the thumbnail image  details array("width"=>, "height"=>, "name")
-     *
-     * @param string $fileName 
-     * @param int $new_x the thumbnail width
-     * @param int $new_y the thumbnail height
-     * @param string $mode can be save, view and both
-     * @return unknown
-     */
-	function _resize( $new_x, $new_y) 
-	{
-		$this->_createFinalImageHandler($new_x, $new_y);
-    // hacks fot transparency of png24 files
-    if ($this->_imgInfoOrig['type'] == 'png') 
-    {    
-        @imagealphablending($this->_imgFinal, false);
-				if(function_exists('ImageCopyResampled'))
-				{
-					@imagecopyresampled($this->_imgFinal, $this->_imgOrig, 0, 0, 0, 0, $new_x, $new_y, $this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
-				} else {
-					@imagecopyresized($this->_imgFinal, $this->_imgOrig, 0, 0, 0, 0, $new_x, $new_y, $this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
-				} 
-        @imagesavealpha($this->_imgFinal, true);
-
-    }else 
-    {//for the rest image
-			if(function_exists('ImageCopyResampled'))
-			{
-				@imagecopyresampled($this->_imgFinal, $this->_imgOrig, 0, 0, 0, 0, $new_x, $new_y, $this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
-			} else {
-				@imagecopyresized($this->_imgFinal, $this->_imgOrig, 0, 0, 0, 0, $new_x, $new_y, $this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
-			}    	
-    }
-
-		
-		$this->_imgInfoFinal['width'] = $new_x;
-		$this->_imgInfoFinal['height'] = $new_y;
-		$this->_imgInfoFinal['name'] = basename($this->_imgInfoOrig['name']);
-		$this->_imgInfoFinal['path'] = $this->_imgInfoOrig['path'];		
-		if($this->_imgFinal)
-		{
-			return true;
-		}else 
-		{			
-			$this->_debug('Unable to resize the image on the fly.');
-			return false;
-							
-		}
-
-	}   
-    /**
-	 * Get the extension of a file name
-	 * 
-	 * @param  string $file
- 	 * @return string
-     * @copyright this function originally come from Andy's php 
-	 */
-    function _getExtension($file)
-    {
-        $ext = '';
-        if (strrpos($file, '.')) {
-            $ext = strtolower(substr($file, (strrpos($file, '.') ? strrpos($file, '.') + 1 : strlen($file)), strlen($file)));
-        }
-        return $ext;
-    }
-
-	    /**
-		 * Validate whether image reading/writing routines are valid.
-		 * 
-		 * @param  string $filename
-		 * @param  string $extension
-		 * @param  string $function
-		 * @param  bool   $write
-		 * @return bool
-     * @access private
-     * @copyright this function originally come from Andy's php 
-	 */
-    function _isSupported($filename, $extension, $function, $write = false)
-    {
-
-       $giftype = ($write) ? ' Create Support' : ' Read Support';
-        $support = strtoupper($extension) . ($extension == 'gif' ? $giftype : ' Support');
-
-        if (!isset($this->gdInfo[$support]) || !$this->gdInfo[$support]) {
-            $request = ($write) ? 'saving' : 'reading';
-            $this->_debug("Support for $request the file type '$extension' cannot be found.");
-            return false;
-        }
-        if (!function_exists($function)) {
-            $request = ($write) ? 'save' : 'read';
-            $this->_debug("The '$function' function required to $request the '$filename' file cannot be found.");
-            return false;
-        }
-
-        return true;
-    }
-    /**
-     * flip image horizotally or vertically
-     *
-     * @param string $direction
-     * @return boolean
-     */
-    function flip($direction="horizontal")
-    {
-				$this->_createFinalImageHandler($this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
-			if($direction != "vertical")
-			{
-				$dst_x = 0;
-				$dst_y = 0;
-				$src_x = $this->_imgInfoOrig['width'] -1;
-				$src_y = 0;
-				$dst_w = $this->_imgInfoOrig['width'];
-				$dst_h = $this->_imgInfoOrig['height'];
-				$src_w = 0 - $this->_imgInfoOrig['width'];
-				$src_h = $this->_imgInfoOrig['height'];
-				
-			}else 
-			{
-				$dst_x = 0;
-				$dst_y = 0;
-				$src_x = 0;
-				$src_y = $this->_imgInfoOrig['height'] - 1;
-				$dst_w = $this->_imgInfoOrig['width'];
-				$dst_h = $this->_imgInfoOrig['height'];
-				$src_w = $this->_imgInfoOrig['width'];
-				$src_h = 0 - $this->_imgInfoOrig['height'];				
-			}			
-				if(function_exists('ImageCopyResampled')){
-					imagecopyresampled($this->_imgFinal, $this->_imgOrig, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
-				} else {
-					imagecopyresized($this->_imgFinal, $this->_imgOrig, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
-				}
-				$this->_imgInfoFinal['width'] = $dst_w;
-				$this->_imgInfoFinal['height'] = $dst_h;
-				$this->_imgInfoFinal['name'] = basename($this->imageFile);
-				$this->_imgInfoFinal['path'] = $this->imageFile;		
-				if($this->_imgFinal)
-				{
-					return true;
-				}else 
-				{			
-					$this->_debug('Unable to resize the image on the fly.');	
-					return false;
-								
-				}   	
-    }
-    /**
-     * flip vertically
-     *
-     * @return boolean
-     */
-    function flipVertical()
-    {
-    	return $this->flip('vertical');
-    }
-    /**
-     * flip horizontal
-     *
-     * @return string
-     */
-    function flipHorizontal()
-    {
-    	return $this->flip('horizontal');
-    }
-
-
-    /**
-     * get the GD version information
-     *
-     * @param  bool $versionOnly
-     * @return array
-     * @access private
-     * @copyright this function originally come from Andy's php 
-     */
-    function getGDInfo($versionOnly = false)
-    {
-        $outputs = array();
-        if (function_exists('gd_info')) 
-        {
-            $outputs = gd_info();
-            if(isset($outputs['JPEG Support']))
-            {
-            	$outputs['JPG Support'] = $outputs['JPEG Support'];
-            }else 
-            {
-	            if(isset($outputs['JPG Support']))
-	            {
-	            	$outputs['JPEG Support'] = $outputs['JPG Support'];
-	            }
-            }
-            
-            
-        } else 
-        {
-            $gd = array(
-                    'GD Version'         => '',
-                    'GIF Read Support'   => false,
-                    'GIF Create Support' => false,
-                    'JPG Support'        => false,
-                    'JPEG Suppor'        => false,
-                    'PNG Support'        => false,
-                    'FreeType Support'   => false,
-                    'FreeType Linkage'   => '',
-                    'T1Lib Support'      => false,
-                    'WBMP Support'       => false,
-                    'XBM Support'        => false       
-                    );
-            ob_start();
-            phpinfo();
-            $buffer = ob_get_contents();
-            ob_end_clean();
-            foreach (explode("\n", $buffer) as $line) {
-                $line = array_map('trim', (explode('|', strip_tags(str_replace('</td>', '|', $line)))));
-                if (isset($gd[$line[0]])) {
-                    if (strtolower($line[1]) == 'enabled') {
-                        $gd[$line[0]] = true;
-                    } else {
-                        $gd[$line[0]] = $line[1];
-                    }
-                }
-            }
-            $outputs = $gd;
-        }
-
-        if (isset($outputs['JIS-mapped Japanese Font Support'])) {
-            unset($outputs['JIS-mapped Japanese Font Support']);
-        }
-        if (function_exists('imagecreatefromgd')) {
-            $outputs['GD Support'] = true;
-        }
-        if (function_exists('imagecreatefromgd2')) {
-            $outputs['GD2 Support'] = true;
-        }
-        if (preg_match('/^(bundled|2)/', $outputs['GD Version'])) {
-            $outputs['Truecolor Support'] = true;
-        } else {
-            $outputs['Truecolor Support'] = false;
-        }
-        if ($outputs['GD Version'] != '') {
-            $match = array();
-            if (preg_match('/([0-9\.]+)/', $outputs['GD Version'], $match)) {
-                $foo = explode('.', $match[0]);
-                $outputs['Version'] = array('major' => isset($foo[0])?$foo[0]:'', 'minor' => isset($foo[1])?$foo[1]:'', 'patch' => isset($foo[2])?$foo:"");
-            }
-        }
-		//print_r($outputs);
-        return ($versionOnly) ? $outputs['Version'] : $outputs;
-    }    
-    
-    /**
-	 * Destroy the resources used by the images.
-	 * 
-	 * @param  bool $original
-	 * @return void
-     * @access public
-     * @copyright this function originally come from Andy's php 
-	 */
-    function DestroyImages($original = true)
-    {
-    		if(!is_null($this->_imgFinal))
-    		{
-    			@imagedestroy($this->_imgFinal);
-    		}        
-        $this->_imgFinal = null;
-        if ($original && !is_null($this->_imgOrig)) {
-            @imagedestroy($this->_imgOrig);
-            $this->_imgOrig = null;
-        }
-    } 
-    
-	function getImageInfo($imagePath)
-	{
-		return $this->_getImageInfo($imagePath);
-	}
-	/**
-     * get image information, e.g. width, height, type
-     * @access public
-     * @return array
-     */
-	function _getImageInfo($imagePath)
-	{
-		$outputs = array();
-		$imageInfo = @getimagesize($imagePath);
-		if ($imageInfo && is_array($imageInfo))
-		{
-			switch($imageInfo[2]){
-				case 1:
-					$type = 'gif';
-					break;
-				case 2:
-					$type = 'jpeg';
-					break;
-				case 3:
-					$type = 'png';
-					break;
-				case 4:
-					$type = 'swf';
-					break;
-				case 5:
-					$type = 'psd';
-				case 6:
-					$type = 'bmp';
-				case 7:
-				case 8:
-					$type = 'tiff';
-				default:
-					$type = '';
-			}
-			$outputs['width'] = $imageInfo[0];
-			$outputs['height'] = $imageInfo[1];
-			$outputs['type'] = $type;
-			$outputs['ext'] = $this->_getExtension($imagePath);
-		} else {
-			$this->_debug('Unable locate the image or read images information.');
-		}
-		return $outputs;
-		
-	}
-	  function rotate($angle, $bgColor=0)
-    {
-    	$angle = intval($angle) -360;
-    		while($angle <0)
-    		{
-    			$angle += 360;
-    		}
- 
-		
-         if($this->_imgFinal = imagerotate($this->_imgOrig, $angle, 0))
-         {
-         	return true;
-         }else 
-         {
-         	return false;
-         }
- 
-       
-    }
-	/**
-	 * get the original image info
-	 *
-	 * @return array
-	 */
-	function getOriginalImageInfo()
-	{
-		return $this->_imgInfoOrig;
-	}
-	/**
-	 * return the final image info
-	 *
-	 * @return array
-	 */
-	function getFinalImageInfo()
-	{
-		if($this->_imgInfoFinal['width'] == '')
-		{
-			if(is_null($this->_imgFinal))
-			{
-				$this->_imgInfoFinal = $this->_imgInfoOrig;
-			}else 
-			{
-				$this->_imgInfoFinal['width'] = @imagesx($this->_imgFinal);
-				$this->_imgInfoFinal['height'] = @imagesy($this->_imgFinal);
-			}
-		}
-		return $this->_imgInfoFinal;
-	}
-	
-    /**
-     *  create final image handler
-     *
-     *  @access private
-     *  @param $dst_w width
-     * 	@param $dst_h height
-     * 	@return boolean
-     * 	@copyright original from noname at nivelzero dot ro
-     */
-    function _createFinalImageHandler($dst_w, $dst_h)
-    {
-		 		if(function_exists('ImageCreateTrueColor'))
-		 		{
-					$this->_imgFinal = @imagecreatetruecolor($dst_w,$dst_h);
-				} else {
-					$this->_imgFinal = @imagecreate($dst_w,$dst_h);
-				}   
-        if (!is_null($this->transparentColorRed) && !is_null($this->transparentColorGreen) && !is_null($this->transparentColorBlue)) {
-        
-            $transparent = @imagecolorallocate($targetImageIdentifier, $this->transparentColorRed, $this->transparentColorGreen, $this->transparentColorBlue);
-            @imagefilledrectangle($this->_imgFinal, 0, 0, $dst_w, $dst_h, $transparent);
-            @imagecolortransparent($this->_imgFinal, $transparent);            
-        }
-        
-    }	
+<?php
+/**
+ * this class provide functions to edit an image, e.g. resize, rotate, flip, crop
+ * @author Logan Cai cailongqun [at] yahoo [dot] com [dot] cn
+ * @link  www.phpletter.com
+ * @version 0.9
+ * @since 14/May/2007
+ * @name Image
+ * 
+ */
+	
+class ImageAjaxFileManager
+{
+	var $_debug = false;
+	var $_errors = array();
+	var $gdInfo = array(); //keep all information of GD extension
+	var $_imgOrig = null; //the hanlder of original image
+	var $_imgFinal = null; //the handler of final image
+	var $imageFile  = null;
+	var $transparentColorRed = null;
+	var $transparentColorGreen = null;
+	var $transparentColorBlue = null;
+	var $chmod = 0755;
+	var $_imgInfoOrig = array(
+	    	'name'=>'',
+	    	'ext'=>'',
+	    	'size'=>'',
+	    	'width'=>'',
+	    	'height'=>'',
+	    	'type'=>'',
+	    	'path'=>'',
+	);
+	var $_imgInfoFinal = array(
+		'name'=>'',
+		'ext'=>'',
+		'size'=>'',
+		'width'=>'',
+		'height'=>'', 
+		'type'=>'',   
+		'path'=>'',
+	);
+	var $_imgQuality = 90;
+	/**
+	 * constructor
+	 *
+	 * @param boolean $debug
+	 * @return Image
+	 */
+	
+	function __construct($debug = false)
+	{
+		$this->enableDebug($debug);
+		$this->gdInfo = $this->getGDInfo();
+	}
+	function Image($debug = false)
+	{
+		$this->__construct($debug);
+	}
+	/**
+	 * enable to debug
+	 *
+	 * @param boolean $value
+	 */
+	function enableDebug($value)
+	{
+		$this->_debug = ($value?true:false);
+	}
+	/**
+	 * check if debug enable
+	 * @return boolean
+	 */
+	function _isDebugEnable()
+	{
+		return $this->_debug;
+	}
+	
+	/**
+	 * append to errors array and shown the each error when the debug turned on
+	 *
+	 * @param  string $string
+	 * @return void
+     * @access private
+     * @copyright this function originally come from Andy's php 
+	 */
+    function _debug($value)
+    {
+    		$this->_errors[] = $value;
+        if ($this->_debug) 
+        {
+            echo $value . "<br />\n";
+        }
+    }		
+    /**
+     * show erros
+     *
+     */
+    function showErrors()
+    {
+    	if(sizeof($this->_errors))
+    	{
+    		foreach($this->_errors as $error)
+    		{
+    			echo $error . "<br />\n";
+    		}
+    	}
+    }
+    /**
+     * Load an image from the file system.
+     * 
+     * @param  string $filename
+     * @return bool 
+     * @access public
+     * @copyright this function originally come from Andy's php 
+     */
+    function loadImage($filename) {
+        $ext  = strtolower($this->_getExtension($filename));
+        $func = 'imagecreatefrom' . ($ext == 'jpg' ? 'jpeg' : $ext);
+        if (!$this->_isSupported($filename, $ext, $func, false)) {
+            return false;
+        }
+        if($ext == "gif") {
+             // the following part gets the transparency color for a gif file
+            // this code is from the PHP manual and is written by
+            // fred at webblake dot net and webmaster at webnetwizard dotco dotuk, thanks!
+            $fp = @fopen($filename, "rb");
+            $result = @fread($fp, 13);
+            $colorFlag = ord(substr($result,10,1)) >> 7;
+            $background = ord(substr($result,11));
+            if ($colorFlag) {
+                $tableSizeNeeded = ($background + 1) * 3;
+                $result = @fread($fp, $tableSizeNeeded);
+                $this->transparentColorRed = ord(substr($result, $background * 3, 1));
+                $this->transparentColorGreen = ord(substr($result, $background * 3 + 1, 1));
+                $this->transparentColorBlue = ord(substr($result, $background * 3 + 2, 1));
+            }
+            fclose($fp);
+            // -- here ends the code related to transparency handling   	
+        }
+        $this->_imgOrig = @$func($filename);
+        if ($this->_imgOrig == null) {
+            $this->_debug("The image could not be created from the '$filename' file using the '$func' function.");
+            return false;
+        }else 
+        {
+        	$this->imageFile = $filename;
+			    $this->_imgInfoOrig = array(
+			    	'name'=>basename($filename),
+			    	'ext'=>$ext,
+			    	'size'=>filesize($filename),
+			    	'path'=>$filename,
+			    );        	
+			    $imgInfo = $this->_getImageInfo($filename);
+			    if(sizeof($imgInfo))
+			    {
+			    	foreach($imgInfo as $k=>$v)
+			    	{
+			    		$this->_imgInfoOrig[$k] = $v;
+			    		$this->_imgInfoFinal[$k] = $v;
+			    	}
+			    }
+			    
+        }
+        return true;
+    }
+
+    /**
+     * Load an image from a string (eg. from a database table)
+     * 
+     * @param  string $string
+     * @return bool 
+     * @access public
+     * @copyright this function originally come from Andy's php 
+     */
+    function loadImageFromString($string)
+    {
+    		$this->imageFile = $filename;
+        $this->_imgOrig = imagecreatefromstring($string);
+        if (!$this->_imgOrig) {
+            $this->_debug('The image (supplied as a string) could not be created.');
+            return false;
+        }
+        return true;
+    }		
+    
+
+    /**
+     * Save the modified image
+     * 
+     * @param  string $filename 
+     * @param  int    $quality 
+     * @param  string $forcetype 
+     * @return bool 
+     * @access public
+     * @copyright this function originally come from Andy's php 
+     */
+    function saveImage($filename, $quality = 90, $forcetype = '')
+    {
+        if ($this->_imgFinal == null) {
+            $this->_debug('No changes intend to be made.');
+            return false;
+        }
+
+        $ext  = ($forcetype == '') ? $this->_getExtension($filename) : strtolower($forcetype);
+        $func = 'image' . ($ext == 'jpg' ? 'jpeg' : $ext);
+        if (!$this->_isSupported($filename, $ext, $func, true)) 
+        {
+            return false;
+        }
+        $saved = false;
+        switch($ext) 
+        {
+            case 'gif':
+                if ($this->gdInfo['Truecolor Support'] && imageistruecolor($this->_imgFinal)) 
+                {
+                    imagetruecolortopalette($this->_imgFinal, false, 255);
+                }
+            case 'png':
+                $saved = $func($this->_imgFinal, $filename);
+                break;
+            case 'jpg':
+                $saved = $func($this->_imgFinal, $filename, $quality);
+                break;
+        }
+
+        if ($saved === false) 
+        {
+            $this->_debug("The image could not be saved to the '$filename' file as the file type '$ext' using the '$func' function.");
+            return false;
+        }else 
+        {
+        	$this->_imgInfoFinal['size'] = @filesize($filename);
+        	@chmod($filename, intval($this->chmod, 8));
+        }
+
+        return true;
+    }    
+    /**
+     * Shows the masked image without any saving
+     * 
+     * @param  string $type 
+     * @param  int    $quality 
+     * @return bool 
+     * @access public
+     * @copyright this function originally come from Andy's php 
+     */
+    function showImage($type = '', $quality = '')
+    {
+        if ($this->_imgFinal == null) {
+            $this->_debug('There is no cropped image to show.');
+            return false;
+        }
+        $type = (!empty($type)?$type:$this->_imgInfoOrig['ext']);
+        $quality = (!empty($quality)?$quality:$this->_imgQuality);
+				
+        $type = strtolower($type);
+        $func = 'image' . ($type == 'jpg' ? 'jpeg' : $type);
+        $head = 'image/' . ($type == 'jpg' ? 'jpeg' : $type);
+        
+        if (!$this->_isSupported('[showing file]', $type, $func, false)) {
+            return false;
+        }
+
+        header("Content-type: $head");
+        switch($type) 
+        {
+            case 'gif':
+                if ($this->gdInfo['Truecolor Support'] && imageistruecolor($this->_imgFinal)) 
+                {
+                    @imagetruecolortopalette($this->_imgFinal, false, 255);
+                }
+            case 'png':
+                $func($this->_imgFinal);
+                break;
+            case 'jpg':
+                $func($this->_imgFinal, '', $quality);
+                break;
+			case 'jpeg':
+                $func($this->_imgFinal, '', $quality);
+                break;
+        }
+        return true;
+    }    
+    
+    /**
+	 * Used for cropping image
+	 * 
+	 * @param  int $dst_x
+	 * @param  int $dst_y
+	 * @param  int $dst_w
+	 * @param  int $dst_h
+	 * @return bool
+     * @access public
+     * @copyright this function originally come from Andy's php 
+	 */  
+    function crop($dst_x, $dst_y, $dst_w, $dst_h)
+    {
+        if ($this->_imgOrig == null) {
+            $this->_debug('The original image has not been loaded.');
+            return false;
+        }
+        if (($dst_w <= 0) || ($dst_h <= 0)) {
+            $this->_debug('The image could not be cropped because the size given is not valid.');
+            return false;
+        }
+        if (($dst_w > imagesx($this->_imgOrig)) || ($dst_h > imagesy($this->_imgOrig))) {
+            $this->_debug('The image could not be cropped because the size given is larger than the original image.');
+            return false;
+        }
+        $this->_createFinalImageHandler($dst_w, $dst_h);
+        if ($this->gdInfo['Truecolor Support']) 
+        {
+            	if(!@imagecopyresampled($this->_imgFinal, $this->_imgOrig, 0, 0, $dst_x, $dst_y, $dst_w, $dst_h, $dst_w, $dst_h))
+            	{
+            		$this->_debug('Unable crop the image.');
+            		return false;
+            	}            
+        } else 
+        {
+          	if(!@imagecopyresized($this->_imgFinal, $this->_imgOrig, 0, 0, $dst_x, $dst_y, $dst_w, $dst_h, $dst_w, $dst_h))
+          	{
+           		$this->_debug('Unable crop the image.');
+          		return false;           		
+          	}
+            
+        }
+        $this->_imgInfoFinal['width'] = $dst_w;
+        $this->_imgInfoFinal['height'] = $dst_h;   
+        return true; 	
+    }
+  
+    
+	/**
+     * Resize the Image in the X and/or Y direction
+     * If either is 0 it will be scaled proportionally
+     *
+     * @access public
+     *
+     * @param mixed $new_x 
+     * @param mixed $new_y 
+     * @param boolean $constraint keep to resize the image proportionally
+     * @param boolean $unchangeIfsmaller keep the orignial size if the orignial smaller than the new size
+     * 
+     *
+     * @return mixed none or PEAR_error
+     */
+	function resize( $new_x, $new_y, $constraint= false, $unchangeIfsmaller=false)
+	{
+		if(!$this->_imgOrig)
+		{
+			$this->_debug('No image fould.');
+			return false;
+		}		
+		
+		$new_x = intval($new_x);
+		$new_y = intval($new_y);
+		if($new_x <=0 || $new_y <= 0)
+		{
+			$this->_debug('either of new width or height can be zeor or less.');
+		}else 
+		{
+		
+			if($constraint)
+			{
+				if($new_x < 1 && $new_y < 1)
+				{
+					$new_x = $this->_imgInfoOrig['width'];
+					$new_y = $this->_imgInfoOrig['height'];
+				}elseif($new_x < 1)
+				{
+					$new_x = floor($new_y / $this->_imgInfoOrig['height'] * $this->_imgInfoOrig['width']);
+	
+				}elseif($new_y < 1)
+				{
+					$new_y = floor($new_x / $this->_imgInfoOrig['width'] * $this->_imgInfoOrig['height']);
+				}else
+				{
+					$scale = min($new_x/$this->_imgInfoOrig['width'], $new_y/$this->_imgInfoOrig['height']) ;
+					$new_x = floor($scale*$this->_imgInfoOrig['width']);
+					$new_y = floor($scale*$this->_imgInfoOrig['height']);
+				}						
+			}
+			if($unchangeIfsmaller)
+			{
+				if($this->_imgInfoOrig['width'] < $new_x && $this->_imgInfoOrig['height'] < $new_y )
+				{
+					$new_x = $this->_imgInfoOrig['width'];
+					$new_y = $this->_imgInfoOrig['height'];
+				}
+			}
+		
+			
+			
+			if(is_null($this->_imgOrig))
+			{
+				$this->loadImage($filePath);
+			}
+			if(sizeof($this->_errors) == 0)
+			{
+				return $this->_resize($new_x, $new_y);
+			}			
+		}
+
+		return false;
+		
+	} // End resize    
+ 	/**
+     * resize the image and return the thumbnail image  details array("width"=>, "height"=>, "name")
+     *
+     * @param string $fileName 
+     * @param int $new_x the thumbnail width
+     * @param int $new_y the thumbnail height
+     * @param string $mode can be save, view and both
+     * @return unknown
+     */
+	function _resize( $new_x, $new_y) 
+	{
+		$this->_createFinalImageHandler($new_x, $new_y);
+    // hacks fot transparency of png24 files
+    if ($this->_imgInfoOrig['type'] == 'png') 
+    {    
+        @imagealphablending($this->_imgFinal, false);
+				if(function_exists('ImageCopyResampled'))
+				{
+					@imagecopyresampled($this->_imgFinal, $this->_imgOrig, 0, 0, 0, 0, $new_x, $new_y, $this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
+				} else {
+					@imagecopyresized($this->_imgFinal, $this->_imgOrig, 0, 0, 0, 0, $new_x, $new_y, $this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
+				} 
+        @imagesavealpha($this->_imgFinal, true);
+
+    }else 
+    {//for the rest image
+			if(function_exists('ImageCopyResampled'))
+			{
+				@imagecopyresampled($this->_imgFinal, $this->_imgOrig, 0, 0, 0, 0, $new_x, $new_y, $this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
+			} else {
+				@imagecopyresized($this->_imgFinal, $this->_imgOrig, 0, 0, 0, 0, $new_x, $new_y, $this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
+			}    	
+    }
+
+		
+		$this->_imgInfoFinal['width'] = $new_x;
+		$this->_imgInfoFinal['height'] = $new_y;
+		$this->_imgInfoFinal['name'] = basename($this->_imgInfoOrig['name']);
+		$this->_imgInfoFinal['path'] = $this->_imgInfoOrig['path'];		
+		if($this->_imgFinal)
+		{
+			return true;
+		}else 
+		{			
+			$this->_debug('Unable to resize the image on the fly.');
+			return false;
+							
+		}
+
+	}   
+    /**
+	 * Get the extension of a file name
+	 * 
+	 * @param  string $file
+ 	 * @return string
+     * @copyright this function originally come from Andy's php 
+	 */
+    function _getExtension($file)
+    {
+        $ext = '';
+        if (strrpos($file, '.')) {
+            $ext = strtolower(substr($file, (strrpos($file, '.') ? strrpos($file, '.') + 1 : strlen($file)), strlen($file)));
+        }
+        return $ext;
+    }
+
+	    /**
+		 * Validate whether image reading/writing routines are valid.
+		 * 
+		 * @param  string $filename
+		 * @param  string $extension
+		 * @param  string $function
+		 * @param  bool   $write
+		 * @return bool
+     * @access private
+     * @copyright this function originally come from Andy's php 
+	 */
+    function _isSupported($filename, $extension, $function, $write = false)
+    {
+
+       $giftype = ($write) ? ' Create Support' : ' Read Support';
+        $support = strtoupper($extension) . ($extension == 'gif' ? $giftype : ' Support');
+
+        if (!isset($this->gdInfo[$support]) || !$this->gdInfo[$support]) {
+            $request = ($write) ? 'saving' : 'reading';
+            $this->_debug("Support for $request the file type '$extension' cannot be found.");
+            return false;
+        }
+        if (!function_exists($function)) {
+            $request = ($write) ? 'save' : 'read';
+            $this->_debug("The '$function' function required to $request the '$filename' file cannot be found.");
+            return false;
+        }
+
+        return true;
+    }
+    /**
+     * flip image horizotally or vertically
+     *
+     * @param string $direction
+     * @return boolean
+     */
+    function flip($direction="horizontal")
+    {
+				$this->_createFinalImageHandler($this->_imgInfoOrig['width'], $this->_imgInfoOrig['height']);
+			if($direction != "vertical")
+			{
+				$dst_x = 0;
+				$dst_y = 0;
+				$src_x = $this->_imgInfoOrig['width'] -1;
+				$src_y = 0;
+				$dst_w = $this->_imgInfoOrig['width'];
+				$dst_h = $this->_imgInfoOrig['height'];
+				$src_w = 0 - $this->_imgInfoOrig['width'];
+				$src_h = $this->_imgInfoOrig['height'];
+				
+			}else 
+			{
+				$dst_x = 0;
+				$dst_y = 0;
+				$src_x = 0;
+				$src_y = $this->_imgInfoOrig['height'] - 1;
+				$dst_w = $this->_imgInfoOrig['width'];
+				$dst_h = $this->_imgInfoOrig['height'];
+				$src_w = $this->_imgInfoOrig['width'];
+				$src_h = 0 - $this->_imgInfoOrig['height'];				
+			}			
+				if(function_exists('ImageCopyResampled')){
+					imagecopyresampled($this->_imgFinal, $this->_imgOrig, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
+				} else {
+					imagecopyresized($this->_imgFinal, $this->_imgOrig, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
+				}
+				$this->_imgInfoFinal['width'] = $dst_w;
+				$this->_imgInfoFinal['height'] = $dst_h;
+				$this->_imgInfoFinal['name'] = basename($this->imageFile);
+				$this->_imgInfoFinal['path'] = $this->imageFile;		
+				if($this->_imgFinal)
+				{
+					return true;
+				}else 
+				{			
+					$this->_debug('Unable to resize the image on the fly.');	
+					return false;
+								
+				}   	
+    }
+    /**
+     * flip vertically
+     *
+     * @return boolean
+     */
+    function flipVertical()
+    {
+    	return $this->flip('vertical');
+    }
+    /**
+     * flip horizontal
+     *
+     * @return string
+     */
+    function flipHorizontal()
+    {
+    	return $this->flip('horizontal');
+    }
+
+
+    /**
+     * get the GD version information
+     *
+     * @param  bool $versionOnly
+     * @return array
+     * @access private
+     * @copyright this function originally come from Andy's php 
+     */
+    function getGDInfo($versionOnly = false)
+    {
+        $outputs = array();
+        if (function_exists('gd_info')) 
+        {
+            $outputs = gd_info();
+            if(isset($outputs['JPEG Support']))
+            {
+            	$outputs['JPG Support'] = $outputs['JPEG Support'];
+            }else 
+            {
+	            if(isset($outputs['JPG Support']))
+	            {
+	            	$outputs['JPEG Support'] = $outputs['JPG Support'];
+	            }
+            }
+            
+            
+        } else 
+        {
+            $gd = array(
+                    'GD Version'         => '',
+                    'GIF Read Support'   => false,
+                    'GIF Create Support' => false,
+                    'JPG Support'        => false,
+                    'JPEG Suppor'        => false,
+                    'PNG Support'        => false,
+                    'FreeType Support'   => false,
+                    'FreeType Linkage'   => '',
+                    'T1Lib Support'      => false,
+                    'WBMP Support'       => false,
+                    'XBM Support'        => false       
+                    );
+            ob_start();
+            phpinfo();
+            $buffer = ob_get_contents();
+            ob_end_clean();
+            foreach (explode("\n", $buffer) as $line) {
+                $line = array_map('trim', (explode('|', strip_tags(str_replace('</td>', '|', $line)))));
+                if (isset($gd[$line[0]])) {
+                    if (strtolower($line[1]) == 'enabled') {
+                        $gd[$line[0]] = true;
+                    } else {
+                        $gd[$line[0]] = $line[1];
+                    }
+                }
+            }
+            $outputs = $gd;
+        }
+
+        if (isset($outputs['JIS-mapped Japanese Font Support'])) {
+            unset($outputs['JIS-mapped Japanese Font Support']);
+        }
+        if (function_exists('imagecreatefromgd')) {
+            $outputs['GD Support'] = true;
+        }
+        if (function_exists('imagecreatefromgd2')) {
+            $outputs['GD2 Support'] = true;
+        }
+        if (preg_match('/^(bundled|2)/', $outputs['GD Version'])) {
+            $outputs['Truecolor Support'] = true;
+        } else {
+            $outputs['Truecolor Support'] = false;
+        }
+        if ($outputs['GD Version'] != '') {
+            $match = array();
+            if (preg_match('/([0-9\.]+)/', $outputs['GD Version'], $match)) {
+                $foo = explode('.', $match[0]);
+                $outputs['Version'] = array('major' => isset($foo[0])?$foo[0]:'', 'minor' => isset($foo[1])?$foo[1]:'', 'patch' => isset($foo[2])?$foo:"");
+            }
+        }
+		//print_r($outputs);
+        return ($versionOnly) ? $outputs['Version'] : $outputs;
+    }    
+    
+    /**
+	 * Destroy the resources used by the images.
+	 * 
+	 * @param  bool $original
+	 * @return void
+     * @access public
+     * @copyright this function originally come from Andy's php 
+	 */
+    function DestroyImages($original = true)
+    {
+    		if(!is_null($this->_imgFinal))
+    		{
+    			@imagedestroy($this->_imgFinal);
+    		}        
+        $this->_imgFinal = null;
+        if ($original && !is_null($this->_imgOrig)) {
+            @imagedestroy($this->_imgOrig);
+            $this->_imgOrig = null;
+        }
+    } 
+    
+	function getImageInfo($imagePath)
+	{
+		return $this->_getImageInfo($imagePath);
+	}
+	/**
+     * get image information, e.g. width, height, type
+     * @access public
+     * @return array
+     */
+	function _getImageInfo($imagePath)
+	{
+		$outputs = array();
+		$imageInfo = @getimagesize($imagePath);
+		if ($imageInfo && is_array($imageInfo))
+		{
+			switch($imageInfo[2]){
+				case 1:
+					$type = 'gif';
+					break;
+				case 2:
+					$type = 'jpeg';
+					break;
+				case 3:
+					$type = 'png';
+					break;
+				case 4:
+					$type = 'swf';
+					break;
+				case 5:
+					$type = 'psd';
+				case 6:
+					$type = 'bmp';
+				case 7:
+				case 8:
+					$type = 'tiff';
+				default:
+					$type = '';
+			}
+			$outputs['width'] = $imageInfo[0];
+			$outputs['height'] = $imageInfo[1];
+			$outputs['type'] = $type;
+			$outputs['ext'] = $this->_getExtension($imagePath);
+		} else {
+			$this->_debug('Unable locate the image or read images information.');
+		}
+		return $outputs;
+		
+	}
+	  function rotate($angle, $bgColor=0)
+    {
+    	$angle = intval($angle) -360;
+    		while($angle <0)
+    		{
+    			$angle += 360;
+    		}
+ 
+		
+         if($this->_imgFinal = imagerotate($this->_imgOrig, $angle, 0))
+         {
+         	return true;
+         }else 
+         {
+         	return false;
+         }
+ 
+       
+    }
+	/**
+	 * get the original image info
+	 *
+	 * @return array
+	 */
+	function getOriginalImageInfo()
+	{
+		return $this->_imgInfoOrig;
+	}
+	/**
+	 * return the final image info
+	 *
+	 * @return array
+	 */
+	function getFinalImageInfo()
+	{
+		if($this->_imgInfoFinal['width'] == '')
+		{
+			if(is_null($this->_imgFinal))
+			{
+				$this->_imgInfoFinal = $this->_imgInfoOrig;
+			}else 
+			{
+				$this->_imgInfoFinal['width'] = @imagesx($this->_imgFinal);
+				$this->_imgInfoFinal['height'] = @imagesy($this->_imgFinal);
+			}
+		}
+		return $this->_imgInfoFinal;
+	}
+	
+    /**
+     *  create final image handler
+     *
+     *  @access private
+     *  @param $dst_w width
+     * 	@param $dst_h height
+     * 	@return boolean
+     * 	@copyright original from noname at nivelzero dot ro
+     */
+    function _createFinalImageHandler($dst_w, $dst_h)
+    {
+		 		if(function_exists('ImageCreateTrueColor'))
+		 		{
+					$this->_imgFinal = @imagecreatetruecolor($dst_w,$dst_h);
+				} else {
+					$this->_imgFinal = @imagecreate($dst_w,$dst_h);
+				}   
+        if (!is_null($this->transparentColorRed) && !is_null($this->transparentColorGreen) && !is_null($this->transparentColorBlue)) {
+        
+            $transparent = @imagecolorallocate($targetImageIdentifier, $this->transparentColorRed, $this->transparentColorGreen, $this->transparentColorBlue);
+            @imagefilledrectangle($this->_imgFinal, 0, 0, $dst_w, $dst_h, $transparent);
+            @imagecolortransparent($this->_imgFinal, $transparent);            
+        }
+        
+    }	
 }

+ 1 - 1
main/inc/lib/fckeditor/editor/plugins/ajaxfilemanager/inc/class.manager.php

@@ -36,7 +36,7 @@ class manager {
 	var $calculateSubdir = true;
 	var $fileTypes = array(
 			array(array("exe", "com"), "fileExe", SEARCH_TYPE_EXE, 0),
-			array(array("gif", "jpg", "png", "bmp", "tif"), "filePicture", SEARCH_TYPE_IMG, 1),
+			array(array("gif", "jpg", "jpeg", "png", "bmp", "tif", "tiff"), "filePicture", SEARCH_TYPE_IMG, 1),
 			array(array("zip", "sit", "rar", "gz", "tar"), "fileZip", SEARCH_TYPE_ARCHIVE, 0),
 			array(array("htm", "html", "php", "jsp", "asp", 'js', 'css'), "fileCode", SEARCH_TYPE_HTML, 1),
 			array(array("mov", "ram", "rm", "asx", "dcr", "wmv"), "fileVideo", SEARCH_TYPE_VIDEO, 1),