2 Stimmen

Bitte übersetzen Sie dies so, dass die gleichen HTML-Tags beibehalten werden, wenn sie vorhanden sind: php ImageMagick gif Größe beibehalten Animation

Nach dem Hochladen wird das GIF zwar verkleinert, aber die Animation geht verloren. Was mache ich falsch?

versuchen
{
   $animation = new Imagick($this->image_filename);

   foreach ($animation as $frame)
   {
      $frame->thumbnailImage($width, $height);
      $frame->setImagePage($width, $height, 0, 0);
   }

   $animation->writeImages($this->image_filename, true);

   echo "";

   $this->image = imagecreatefromgif($this->image_filename);
}
fang(Exception $e){ echo $e->getMessage(); }

Keine Ausnahme aufgetreten.

Array
(
    [versionNumber] => 1608
    [versionString] => ImageMagick 6.4.8 2011-03-20 Q16 OpenMP http://www.imagemagick.org
)

3voto

pushOk Punkte 290

Versuchen Sie dies: http://www.php.net/manual/en/imagick.coalesceimages.php
Der erste Kommentar scheint das zu sein, was Sie benötigen. Und Sie sollten niemals die GD2-Bibliothek ("imagecreatefromgif") und Imagick mischen.

2voto

Fernando RIS Punkte 13

Ich habe diese Funktion verwendet:

function gifResize($file_origin,$file_dest,$percent){
   $percent = $percent*100;
   $crop_w = 0;
   $crop_h = 0;
   $crop_x = 0;
   $crop_y = 0;
   $image = new Imagick($file_origin);
   $originalWidth = $image->getImageWidth();
   $originalHeight = $image->getImageHeight();
   $size_w = ($originalWidth*$percent)/100;
   $size_h = ($originalHeight*$percent)/100;
   if(($size_w-$originalWidth)>($size_h-$originalHeight)){
       $s = $size_h/$originalHeight;
       $size_w = round($originalWidth*$s);
       $size_h = round($originalHeight*$s);
   }else{
       $s = $size_w/$originalWidth;
       $size_w = round($originalWidth*$s);
       $size_h = round($originalHeight*$s);
   }
   echo "$originalWidth $size_w - $originalHeight $size_h";
   $image = $image->coalesceImages();

   foreach ($image as $frame) {
       $frame->cropImage($crop_w, $crop_h, $crop_x, $crop_y);
       $frame->thumbnailImage($size_h, $size_w);
       $frame->setImagePage($size_h, $size_w, 0, 0);
   }
   $imageContent = $image->getImagesBlob();
   $fp = fopen($file_dest,'w');
   fwrite($fp,$imageContent);
   fclose($fp);

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X