Sto cercando di utilizzare una classe per caricare i + comuni formati immagine, la classe funziona molto bene se non fosse per le GIF trasparenti alle quali durante l'upload appunto viene tolta questa trasparenza:

Di seguito riporto la classe in questione
codice:
class upload
{
	var $directory_name;
	var $max_filesize;
	var $error;
	var $user_tmp_name;
	var $user_file_name;
	var $user_file_size;
	var $user_file_type;
	var $user_full_name;
	var $thumb_name;

 	function set_directory($dir_name = ".")
	{
	 $this->directory_name = $dir_name;
	}

 	function set_max_size($max_file = 300000)
	{
	 $this->max_filesize = $max_file;
	}

 	function error()
	{
	 return $this->error;
	}

 	function is_ok()
	{
	 if(isset($this->error))
	  return FALSE;
	 else
	  return TRUE;
	}

	function set_tmp_name($temp_name)
	{
	 $this->user_tmp_name = $temp_name;	 
	}

	function set_file_size($file_size)
	{
	 $this->user_file_size = $file_size;
	}

	function set_file_type($file_type)
	{
	 $this->user_file_type = $file_type;	 
	}

 	function set_file_name($file)
	{
		$this->user_file_name = $file;
		$this->user_full_name = $this->directory_name."/".$this->user_file_name;
	}

	function resize($max_width = 0, $max_height = 0 )
	{
	if(eregi("\.png$",$this->user_full_name))
	{
	 $img = ImageCreateFromPNG ($this->user_full_name);
	}
	
	if(eregi("\.(jpg|jpeg)$",$this->user_full_name))
	{
	 $img = ImageCreateFromJPEG ($this->user_full_name);
	}
	
	if(eregi("\.gif$",$this->user_full_name))
	{
	 $img = ImageCreateFromGif ($this->user_full_name);
	}

    	$FullImage_width = imagesx ($img);    
    	$FullImage_height = imagesy ($img);   

		if(isset($max_width) && isset($max_height) && $max_width != 0 && $max_height != 0)
		{
		 $new_width = $max_width;
		 $new_height = $max_height;
		}
		else if(isset($max_width) && $max_width != 0)
		{
		 $new_width = $max_width;
		 $new_height = ((int)($new_width * $FullImage_height) / $FullImage_width);
		}
		else if(isset($max_height) && $max_height != 0)
		{
		 $new_height = $max_height;
		 $new_width = ((int)($new_height * $FullImage_width) / $FullImage_height);
		}		
		else
		{
		 $new_height = $FullImage_height;
		 $new_width = $FullImage_width;
		}	
/*
    	$ratio =  ( $FullImage_width > $max_width ) ? (real)($max_width / $FullImage_width) : 1 ;
    	$new_width = ((int)($FullImage_width * $ratio));    //full size width
    	$new_height = ((int)($FullImage_height * $ratio));    //full size height
    	
    	$ratio =  ( $new_height > $max_height ) ? (real)($max_height / $new_height) : 1 ;
    	$new_width = ((int)($new_width * $ratio));    //mid size width
    	$new_height = ((int)($new_height * $ratio));    //mid size height
*/

    	$full_id =  ImageCreateTrueColor ( $new_width , $new_height );
		ImageCopyResampled ( $full_id, $img, 0,0,0,0, $new_width, $new_height, $FullImage_width, $FullImage_height );
		

		if(eregi("\.(jpg|jpeg)$",$this->user_full_name))
		{
		 $full = ImageJPEG( $full_id, $this->user_full_name,100);
		}
		
		if(eregi("\.png$",$this->user_full_name))
		{
		 $full = ImagePNG( $full_id, $this->user_full_name);
		}
		
		if(eregi("\.gif$",$this->user_full_name))
		{
		 $full = ImageGIF($full_id, $this->user_full_name);
		}
		ImageDestroy( $full_id );
		unset($max_width);
		unset($max_height);
	}

	function start_copy()
	{
		if(!isset($this->user_file_name))
		 $this->error = "You must define filename!";

        if ($this->user_file_size <= 0)
		 $this->error = "File size error (0): $this->user_file_size KB
";

        if ($this->user_file_size > $this->max_filesize)
		 $this->error = "File size error (1): $this->user_file_size KB
";

        if (!isset($this->error))
        {
			$filename = basename($this->user_file_name);

            if (!empty($this->directory_name)) 
				$destination = $this->user_full_name;
			else 
				$destination = $filename;
/* file exists control.. if file is exists it upload new file name
			if (file_exists($destination))
            {
            	srand((double)microtime()*1000000);
            	$filename = rand(0,20000)."_".$filename;
            	if (!empty ($this->directory_name) ) 
					$destination = $this->directory_name."/".$filename;
				else 
					$destination = $filename;
            }
			
*/			
			if(!is_uploaded_file($this->user_tmp_name))
			 $this->error = "File ".$this->user_tmp_name." is not uploaded correctly.";
	  
			if (!@move_uploaded_file ($this->user_tmp_name,$destination))
			 $this->error = "Impossible to copy ".$this->user_file_name." from $userfile to destination directory.";
		}
	}
	
	function set_thumbnail_name($thumbname)
	{
	if(eregi("\.png$",$this->user_full_name))
	 $this->thumb_name = $this->directory_name."/".$thumbname.".png";
	if(eregi("\.(jpg|jpeg)$",$this->user_full_name))
	 $this->thumb_name = $this->directory_name."/".$thumbname.".jpg";
	if(eregi("\.gif$",$this->user_full_name))
	 $this->thumb_name = $this->directory_name."/".$thumbname.".gif";
	}
	
	function create_thumbnail()
	{
	 if (!copy($this->user_full_name, $this->thumb_name))
	  {
	  echo "
".$this->user_full_name.", ".$this->thumb_name."
";
	   echo "failed to copy $file...
\n";
	  }
	}
	
	function set_thumbnail_size($max_width = 0, $max_height = 0 )
	{
	if(eregi("\.png$",$this->thumb_name))
	{
	 $img = ImageCreateFromPNG ($this->thumb_name);
	}
	
	if(eregi("\.(jpg|jpeg)$",$this->thumb_name))
	{
	 $img = ImageCreateFromJPEG ($this->thumb_name);
	}
	
	if(eregi("\.gif$",$this->thumb_name))
	{
	 $img = ImageCreateFromGif ($this->thumb_name);
	}

    	$FullImage_width = imagesx ($img);    
    	$FullImage_height = imagesy ($img); 
		
		if(isset($max_width) && isset($max_height) && $max_width != 0 && $max_height != 0)
		{
		 $new_width = $max_width;
		 $new_height = $max_height;
		}
		else if(isset($max_width) && $max_width != 0)
		{
		 $new_width = $max_width;
		 $new_height = ((int)($new_width * $FullImage_height) / $FullImage_width);
		}
		else if(isset($max_height) && $max_height != 0)
		{
		 $new_height = $max_height;
		 $new_width = ((int)($new_height * $FullImage_width) / $FullImage_height);
		}		
		else
		{
		 $new_height = $FullImage_height;
		 $new_width = $FullImage_width;
		}	
/*
    	$ratio =  ( $FullImage_width > $max_width ) ? (real)($max_width / $FullImage_width) : 1 ;
    	$new_width = ((int)($FullImage_width * $ratio));    //full size width
    	$new_height = ((int)($FullImage_height * $ratio));    //full size height
    	
    	$ratio =  ( $new_height > $max_height ) ? (real)($max_height / $new_height) : 1 ;
    	$new_width = ((int)($new_width * $ratio));    //mid size width
    	$new_height = ((int)($new_height * $ratio));    //mid size height
*/
    	$full_id =  ImageCreateTrueColor ( $new_width , $new_height );
		ImageCopyResampled ( $full_id, $img, 0,0,0,0, $new_width, $new_height, $FullImage_width, $FullImage_height );
		

		if(eregi("\.(jpg|jpeg)$",$this->thumb_name))
		{
		 $full = ImageJPEG( $full_id, $this->thumb_name,100);
		}
		
		if(eregi("\.png$",$this->thumb_name))
		{
		 $full = ImagePNG( $full_id, $this->thumb_name);
		}
		
		if(eregi("\.gif$",$this->thumb_name))
		{
		 $full = ImageGIF($full_id, $this->thumb_name);
		}
		ImageDestroy( $full_id );
		unset($max_width);
		unset($max_height);
	}
}

...il suo utilizzo
codice:
<?
include "upload.inc.php";
$img_name_new = rand(0, 9999999);

// Defining Class
$yukle = new upload;

// Set Max Size
$yukle->set_max_size(180000);

// Set Directory
$yukle->set_directory("upload");

// Do not change
// Set Temp Name for upload, $_FILES['file']['tmp_name'] is automaticly get the temp name
$yukle->set_tmp_name($_FILES['file']['tmp_name']);

// Do not change
// Set file size, $_FILES['file']['size'] is automaticly get the size
$yukle->set_file_size($_FILES['file']['size']);

// Do not change
// Set File Type, $_FILES['file']['type'] is automaticly get the type
$yukle->set_file_type($_FILES['file']['type']);

// Set File Name, $_FILES['file']['name'] is automaticly get the file name.. you can change
$yukle->set_file_name($_FILES['file']['name']);

// Start Copy Process
$yukle->start_copy();

// If uploaded file is image, you can resize the image width and height
// Support gif, jpg, png
$yukle->resize(0,0);

// Control File is uploaded or not
// If there is error write the error message
if($yukle->is_ok())
;
else
 echo $yukle->error()."
";

// Set a thumbnail name
$yukle->set_thumbnail_name($img_name_new);

// create thumbnail
$yukle->create_thumbnail();

// change thumbnail size
$yukle->set_thumbnail_size(0, 0);

$yukle->set_thumbnail_name('thumb_'.$img_name_new);
$yukle->create_thumbnail();
$yukle->set_thumbnail_size(50, 0);

/*
$yukle->set_thumbnail_name("hatice3");
$yukle->create_thumbnail();
$yukle->set_thumbnail_size(62, 150);
*/
$ric_est = explode('.', $_FILES['file']['name']);
$estensione = '.'.$ric_est[1]; 
unlink('./upload/'.$_FILES['file']['name']);
?>
<html>
<head>
<title></title>
<link rel="STYLESHEET" type="text/css" href="stile.css">
</head>
<body bgcolor="#333333">
[img]upload/<?php echo $img_name_new.$estensione ?>[/img]
</body></html>
come posso far si che le GIF trasparenti rimangano tali?