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?