2015-06-04 2 views
1

Этот сценарий загружает изображение, создает его водяные знаки, а также создает миниатюру изображения. Я отредактировал его, чтобы игнорировать водяные знаки GIF-файлов, так как библиотека GD разбивает анимацию при водяных знаках. Это водяные знаки подходящих типов изображений просто отлично, но когда GIF загружен, он не остается анимированным, даже если он не водяной знак. Вот полный код:Почему файлы GIF не будут анимированы?

<?php 
if(isset($_POST)) 
{ 

    $Big   = 980 
    $Small   = 400; 
    $ThumbPrefix   = "thumb_"; 
    $DestinationDirectory = '../folder/'; 
    $Quality    = 100; 


    if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){ 
     die(); 
    } 


    if(!isset($_FILES['ImageFile']) || !is_uploaded_file($_FILES['ImageFile']['tmp_name'])) 
    { 
      die('Error!'); 
    } 


    $Number  = substr(str_shuffle(MD5(microtime())), 0, 10); 

    $ImageName  = str_replace(' ','-',strtolower($_FILES['ImageFile']['name'])); 
    $ImageSize  = $_FILES['ImageFile']['size']; 
    $TempSrc  = $_FILES['ImageFile']['tmp_name']; 
    $ImageType  = $_FILES['ImageFile']['type']; 

    switch(strtolower($ImageType)) 
    { 
     case 'image/png': 
      $CreatedImage = imagecreatefrompng($_FILES['ImageFile']['tmp_name']); 
      break; 
     case 'image/gif': 
      $CreatedImage = imagecreatefromgif($_FILES['ImageFile']['tmp_name']); 
      break;   
     case 'image/jpeg': 
     case 'image/pjpeg': 
      $CreatedImage = imagecreatefromjpeg($_FILES['ImageFile']['tmp_name']); 
      break; 
     default: 
      die('Unsupported File!'); 
    } 


    list($CurWidth,$CurHeight)=getimagesize($TempSrc); 


    $ImageExt = substr($ImageName, strrpos($ImageName, '.')); 
    $ImageExt = str_replace('.','',$ImageExt); 


    $ImageName  = preg_replace("/\\.[^.\\s]{3,4}$/", "", $ImageName); 


    $NewName = $Number.'-'.$ImageName.'.'.$ImageExt; 
    $url = 'http://'[email protected]$_SERVER['HTTP_HOST'].strtr(dirname(dirname($_SERVER['SCRIPT_NAME'])), '\\', '/').''; 

    $thumb_ImageName = $DestinationDirectory.$ThumbPrefix.$NewName; 
    $ImageName   = $DestinationDirectory.$NewName; 


    if(resizeImage2($CurWidth,$CurHeight,$Small,$thumb_ImageName,$CreatedImage,$Quality,$ImageType)) 
    { 


     if(!resizeImage($CurWidth,$CurHeight,$MainImageSize,$ImageName,$CreatedImage,$Quality,$ImageType)) 
      { 
       echo 'Error'; 
      } 

$variable = <<<IMG 
<p>Image Preview</p></br> 
<div class="up"> 
<img src="$url/folder/$NewName"> 
<label onclick="document.getElementById('content').value = '$url/folder/$ThumbPrefix$NewName';document.getElementById('extra').value = '$url/folder/$NewName';document.getElementById('imgprev').src = '$url/folder/$ThumbPrefix$NewName';" class="img-submit" for="upload"></label> 
</div> 
IMG; 


echo $variable; 


    }else{ 
     die('Error'); 
    } 
} 


function resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType) 
{ 
    //Check Image size is not 0 
    if($CurWidth <= 0 || $CurHeight <= 0) 
    { 
     return false; 
    } 


    $NewCanves   = imagecreatetruecolor($CurWidth, $CurHeight); 
    $watermark = 'watermark/watermark.png'; 
    if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $CurWidth, $CurHeight, $CurWidth, $CurHeight)) 
    { 
     switch(strtolower($ImageType)) 
     { 
      case 'image/png': 
       imagepng($NewCanves,$DestFolder); 
       break; 
      case 'image/gif': 
       imagegif($NewCanves,$DestFolder); 
       break;   
      case 'image/jpeg': 
      case 'image/pjpeg': 
       imagejpeg($NewCanves,$DestFolder,$Quality); 
       break; 
      default: 
       return false; 
     } 


      if (($ImageType =="image/pjpeg" OR $ImageType =="image/jpeg" OR $ImageType =="image/jpg")) 
      { 
      $watermark = imagecreatefrompng($watermark); 

      $watermark_width = imagesx($watermark); 
      $watermark_height = imagesy($watermark); 

      $watermark_x = ($CurWidth-$watermark_width); 
      $watermark_y = ($CurHeight-$watermark_height)/2; 
      imagecopy($NewCanves, $watermark, $watermark_x, $watermark_y, 0, 0, $watermark_width, $watermark_height); 
      } 

      imagejpeg($NewCanves,$DestFolder,$Quality); 

    if(is_resource($NewCanves)) {imagedestroy($NewCanves);} 
    return true; 
    } 

} 


function resizeImage2($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType) 
{ 

    if($CurWidth <= 0 || $CurHeight <= 0) 
    { 
     return false; 
    } 

    //Construct a proportional size of new image 
    $ImageScale   = min($MaxSize/$CurWidth, $MaxSize/$CurWidth); 
    $Width    = ceil($ImageScale*$CurWidth); 
    $Height    = ceil($ImageScale*$CurHeight); 
    $NewCanves   = imagecreatetruecolor($Width, $Height); 
    $watermark = 'watermark/watermark.png'; 

    if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $Width, $Height, $CurWidth, $CurHeight)) 
    { 
     switch(strtolower($ImageType)) 
     { 
      case 'image/png': 
       imagepng($NewCanves,$DestFolder); 
       break; 
      case 'image/gif': 
       imagegif($NewCanves,$DestFolder); 
       break;   
      case 'image/jpeg': 
      case 'image/pjpeg': 
       imagejpeg($NewCanves,$DestFolder,$Quality); 
       break; 
      default: 
       return false; 
     } 




     imagejpeg($NewCanves,$DestFolder,$Quality); 


    if(is_resource($NewCanves)) {imagedestroy($NewCanves);} 
    return true; 
    } 

} 

Я заметил, что если я использую:

if(!move_uploaded_file($_FILES['ImageFile']['tmp_name'], $DestinationDirectory.$NewImageName)) 

вместо:

if(!resizeImage($CurWidth,$CurHeight,$MainImageSize,$DestRandImageName,$CreatedImage,$Quality,$ImageType)) 

то GIFs будет оставаться оживленным, но это Безразлично» т водяной знак ничего больше. Я напуган. Мои знания PHP очень ограничены. У кого-нибудь есть идеи? Благодарю.

+0

по теме: http://stackoverflow.com/a/718500/3000179 –

ответ

0

Вы не должны конвертировать GIF изображение в формате JPG или PNG типа, если вы хотите, чтобы рисунок анимировать

+0

Какая часть кода новообращенных изображения? – phpnoob

+0

Этот код '$ watermark = imagecreatefrompng ($ watermark);' inside resizeImage. Я думаю, вы должны использовать только изображение GIF для анимированного изображения –

Смежные вопросы