librerie gd e problemi immagini gif

Sto usando le librerie gd per uppare e fare il resize di immagini. Ho provato ad uppare un immagine gif e noto però che una volta uppata l'immagine gif si ferma al primo frame e quindi non vedo l'animazione.

Vi incollo le funzioni principali che utilizzo e nella funzione imageEditor ho notato che modificando questa stringa (nel codice trovate il commento)

  $this->type = strtolower(end(explode('.', $filename)));

in

$type= strtolower(end(explode('.', $filename)));

 e di conseguenza ogni suo riferimento ,la gif viene uppata correttamente ma il resize per qualche assurdo motivo non funziona più  :-\

move_uploaded_file ($foto['tmp_name'],$src))
elabora_img($src,$width);


function elabora_img($src,$width_fissa){         
                  
if(   $size = getimagesize ($src))
{
      $f = $src;
      $d = strrpos($f, "/");
      $file = substr($f, $d);
      $path = substr($f, 0, $d);
      $imageEditor = new ImageEditor($file,$path);
      list($width_orig, $height_orig) = getimagesize($src);
      if($width_orig>$width_fissa)
         $imageEditor->resize($width_fissa,'700',$src);
      $imageEditor->outputFile($file,$path);
   
   
   return true;
}
return false;
}

 function ImageEditor($filename, $path, $col=NULL) 
  {
    $this->font = false;
    $this->error = false;
    $this->size = 25;
    if(is_numeric($filename) && is_numeric($path))
    ## IF NO IMAGE SPECIFIED CREATE BLANK IMAGE
    {
      $this->x = $filename;
      $this->y = $path;
      $this->type = "jpg";
      $this->img = imagecreatetruecolor($this->x, $this->y);
      if(is_array($col)) 
      ## SET BACKGROUND COLOUR OF IMAGE
      {
        $colour = ImageColorAllocate($this->img, $col[0], $col[1], $col[2]);
        ImageFill($this->img, 0, 0, $colour);
      }
    }
    else
    ## IMAGE SPECIFIED SO LOAD THIS IMAGE
    {
      ## FIRST SEE IF WE CAN FIND IMAGE

      if(file_exists($path . $filename))
      {
        $file = $path . $filename;
      }
      else if (file_exists($path . "/" . $filename))
      {
        $file = $path . "/" . $filename;
      }
      else
      {
        $this->errorImage("File Could Not Be Loaded");
      }
      
      if(!($this->error)) 
      {
        ## LOAD OUR IMAGE WITH CORRECT FUNCTION
        $this->type = strtolower(end(explode('.', $filename)));  /*QUESTA E' LA STRINGA CHE MODIFICO mettendo $type invece di $this->type e per magia l'immagine viene uppata correttamente ma il resize non funziona più*/
        if ($this->type == 'jpg' || $this->type == 'jpeg') 
        {
          $this->img = @imagecreatefromjpeg($file);
        } 
        else if ($this->type == 'png') 
        {
          $this->img = @imagecreatefrompng($file);
        } 
        else if ($this->type == 'gif') 
        {
          $this->img = @imagecreatefromgif($file);
        }
        ## SET OUR IMAGE VARIABLES
        $this->x = imagesx($this->img);
        $this->y = imagesy($this->img);
      }
    }
  }

 function resize($width, $height,$filename) 
  {
    if(!$this->error) 
    {
   list($width_orig, $height_orig) = getimagesize($filename);

   
   
      $tmpimage = imagecreatetruecolor($width, $height);
      imagecopyresampled($tmpimage, $this->img, 0, 0, 0, 0, $width, $height, $this->x, $this->y);
      imagedestroy($this->img);
      $this->img = $tmpimage;
      $this->y = $height;
      $this->x = $width;
    }
  }


function outputFile($filename, $path) 
  {
    if ($this->type == 'jpg' || $this->type == 'jpeg') 
    {
      imagejpeg($this->img, ($path . $filename));
    } 
    else if ($this->type == 'png') 
    {
      imagepng($this->img, ($path . $filename));
    } 
    else if ($this->type == 'gif') 
    {
      imagegif($this->img, ($path . $filename));
    }
  }
inviato 9 anni fa
Toto007
X 0 X

Perchè una gif animata è una serie di immagini, il resize dovrebbe essere fatto su ognuna di esse e non è semplice, infatti ci sono anche pochi editor che permettono di farlo con le gif animate.

Infatti ridimensioni solo il primo frame, per questo non è più animata.

risposto 9 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda