2011-03-25 4 views
2

Je suis en train d'écrire un code en utilisant PHP et Imagick qui rassemble plusieurs images en une seule image GIF animée en utilisant le code suivant:Réduire la taille du fichier GIF en utilisant ImageMagick et PHP

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors',1); 

    $anim = new Imagick(); 


    for($i = 0; $i<=36; $i++) { 
     $bgImage = new Imagick('Background.gif'); 

     $imagick = new Imagick("sw_layers-$i.gif"); 

     $bgImage->setImageColorspace($imagick->getImageColorspace()); 
     $bgImage->compositeImage($imagick, imagick::DISPOSE_PREVIOUS,0,0); 

     $draw = new ImagickDraw(); 

     /*** set the fill color ***/ 
     $draw->setFillColor(new ImagickPixel("orange")); 

     $draw->annotation(10, 10, 'Hello world'); 

     $bgImage->drawImage($draw); 

     $anim->addImage($bgImage); 
     $anim->setFormat("gif"); 
     $anim->setImageDispose(3); 
     $anim->setImageCompression(imagick::COMPRESSION_JPEG); 
     $anim->setImageCompressionQuality(50); 
    } 

    echo $anim->writeImages('Result.gif', true); 
?> 

L'image de fond et « Bonjour tout le monde » sont censés apparaît pour chaque image. Comme vous pouvez le voir, je joing l'image de texte, l'image de fond et le calque dans un seul cadre. l'image de calque contient une sorte de dessin avec un arrière-plan transparent, de sorte que l'arrière-plan et le texte fournis doivent apparaître dans ce cas. Cependant, le problème réside dans la taille de fichier du gif animé "result.gif" qui s'avère être d'environ 3 Mo pour une image de 30 images.

La question est, comment puis-je réduire la taille du fichier sans affecter la qualité autant? Je suis ouvert aux réponses, y compris l'exécution d'un outil de ligne de commande sur le système.

Merci

Répondre

0

Avez-vous essayé cela, il compare images et supprime les données répliquées sur des cadres?

/* optimize the image layers */ 
$im->optimizeImageLayers(); 

/* write the image back */ 
$im->writeImages("test_optimized.gif", true); 

Source: Imagick OptimizeLayers

+0

Je reçois des erreurs "images ne sont pas de la même taille" même si les images sont déjà de la même taille. une idée? –

Questions connexes