2012-09-14 54 views
0

我的图片上传表单有问题。当我上传动画的GIF它剂量似乎动画了。有什么办法可以解决这个问题吗?或者如果我可以跳过调整.gif扩展名的大小,只调整其他文件类型,如.jpg,PNG等,这也将是罚款。动画gif调整大小并上传

upload.php的代码

<?php 

// replace with your mysql database details 
$MySql_username  = "root"; //mysql username 
$MySql_password  = ""; //mysql password 
$MySql_hostname  = "localhost"; //hostname 
$MySql_databasename = 'upload'; //databasename 


$UploadDirectory = 'uploads/'; //Upload Directory, ends with slash & make sure folder exist 
$UploadThumbDirectory ='uploads/thumb/';//Upload thumb Directory, ends with slash & make sure folder exist 

//Some Settings 
$ThumbMaxWidth   = 150; //Thumbnail width 
$ThumbMaxHeight   = 150; //Thumbnail Height 
$BigImageMaxWidth  = 700; //Resize Image width to 
$BigImageMaxHeight  = 700; //Resize Image height to 
$ThumbPrefix   = "thumb_"; //Normal thumb Prefix 

if ([email protected]_exists($UploadDirectory)) { 
    //destination folder does not exist 
    die("Make sure Upload directory exist!"); 
} 

if ([email protected]_exists($UploadThumbDirectory)) { 
    //destination folder does not exist 
    die("Make sure Upload Thumb directory exist!"); 
} 

if($_POST) 
{ 
    if(!isset($_POST['mName']) || strlen($_POST['mName'])<1) 
    { 
     //required variables are empty 
     die("Title is empty!"); 
    } 

    if(!isset($_FILES['mFile'])) 
    { 
     //required variables are empty 
     die("File is empty!"); 
    } 


    if($_FILES['mFile']['error']) 
    { 
     //File upload error encountered 
     die(upload_errors($_FILES['mFile']['error'])); 
    } 

    $ImageName   = strtolower($_FILES['mFile']['name']); //uploaded file name 
    $Imageitle   = $_POST['mName']; // file title 
    $ImageExt   = substr($ImageName, strrpos($ImageName, '.')); //file extension 
    $ImageType   = $_FILES['mFile']['type']; //file type 
    $ImageSize   = $_FILES['mFile']["size"]; //file size 
    $TempSrc   = $_FILES['mFile']['tmp_name']; 
    $uploaded_date  = date("Y-m-d H:i:s"); 
    $process  = true; 

    //Validate file + create image from uploaded file. 
    switch(strtolower($ImageType)) 
    { 
     case 'image/png': 
      $CreatedImage = imagecreatefrompng($_FILES['mFile']['tmp_name']); 
      break; 
     case 'image/gif': 
      $CreatedImage = @imagecreatefromstring(file_get_contents(($_FILES['mFile']['tmp_name']))); 
      break; 
     case 'image/jpeg': 
      $CreatedImage = imagecreatefromjpeg($_FILES['mFile']['tmp_name']); 
      break; 
     case 'image/bmp': 
      $CreatedImage = imagecreatefromjpeg($_FILES['mFile']['tmp_name']); 
      break; 
     default: 
      die('Unsupported File!'); //output error 
    } 
    //get Image Size 
    list($CurWidth,$CurHeight)=getimagesize($TempSrc); 

    //File Title will be used as new File name 
    $NewName = preg_replace(array('/\s/', '/\.[\.]+/', '/[^\w_\.\-]/'), array('_', '.', ''), strtolower($Imageitle)); 
    $DestRandImageName = $NewName.'_'.date("YmdHis").$ImageExt; 
    $NewThumbFileName = $NewName.'_'.$ThumbPrefix.date("YmdHis").$ImageExt; 




    //Resize image to our Specified Size by calling our resizeImage function. 
    if(resizeImage($CurWidth,$CurHeight,$BigImageMaxWidth,$BigImageMaxHeight,$UploadDirectory .$DestRandImageName,$CreatedImage)) 
    { 
     //Create Thumbnail for the Image 
     resizeImage($CurWidth,$CurHeight,$ThumbMaxWidth,$ThumbMaxHeight,$UploadThumbDirectory.$NewThumbFileName,$CreatedImage); 
     // Insert info into database table.. do w.e! 
     $dbconn = mysql_connect($MySql_hostname, $MySql_username, $MySql_password)or die("Unable to connect to MySQL"); 
     mysql_select_db($MySql_databasename,$dbconn); 
     @mysql_query("INSERT INTO images (img_name, img_title, thumb_name, uploaded_date) VALUES ('$DestRandImageName', '$Imageitle','$NewThumbFileName','$uploaded_date')"); 
     mysql_close($dbconn); 

     //respond with our images 
     echo '<table width="100%" border="0" cellpadding="4" cellspacing="0"> 
     <tr><td align="center"><img src="'.$UploadThumbDirectory.$NewThumbFileName.'" alt="Thumbnail"></td></tr><tr> 
     <td align="center"><img src="'.$UploadDirectory .$DestRandImageName.'" alt="Resized Image"></td></tr></table>'; 

    }else{ 
     die('Upload Error'); //output error 
    } 
} 

//function outputs upload error messages, http://www.php.net/manual/en/features.file-upload.errors.php#90522 
function upload_errors($err_code) { 
    switch ($err_code) { 
     case UPLOAD_ERR_INI_SIZE: 
      return 'The uploaded file exceeds the upload_max_filesize directive in php.ini'; 
     case UPLOAD_ERR_FORM_SIZE: 
      return 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'; 
     case UPLOAD_ERR_PARTIAL: 
      return 'The uploaded file was only partially uploaded'; 
     case UPLOAD_ERR_NO_FILE: 
      return 'No file was uploaded'; 
     case UPLOAD_ERR_NO_TMP_DIR: 
      return 'Missing a temporary folder'; 
     case UPLOAD_ERR_CANT_WRITE: 
      return 'Failed to write file to disk'; 
     case UPLOAD_ERR_EXTENSION: 
      return 'File upload stopped by extension'; 
     default: 
      return 'Unknown upload error'; 
    } 
} 


function resizeImage($CurWidth,$CurHeight,$MaxWidth,$MaxHeight,$DestFolder,$SrcImage) 
{ 
    $ImageScale   = min($MaxWidth/$CurWidth, $MaxHeight/$CurHeight); 
    $NewWidth   = ceil($ImageScale*$CurWidth); 
    $NewHeight   = ceil($ImageScale*$CurHeight); 
    $NewCanves   = imagecreatetruecolor($NewWidth, $NewHeight); 
    // Resize Image 
    if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight)) 
    { 
     // copy file 
     if(imagejpeg($NewCanves,$DestFolder,100)) 
     { 
      imagedestroy($NewCanves); 
      return true; 
     } 
    } 
} 
?> 
+0

你会发现你的答案在这里看到链接http://stackoverflow.com/questions/718491/resize-animated-gif-file-without-destroying-animation –

+0

GD将只处理动画gif的第一帧。你基本上是在摧毁它。 –

回答