47 votes

Redimensionner le fichier gif animé sans détruire l'animation

J'ai besoin de redimensionner un fichier GIF animé sans détruire l'animation.

Comment puis-je le faire en utilisant PHP?

65voto

Jeremy Stanley Points 3255

si vous avez imagemagick d'accès, vous pouvez le faire:

system("convert big.gif -coalesce coalesce.gif");
system("convert -size 200x100 coalesce.gif -resize 200x10 small.gif");

ce risque est plus possible avec la imagemagick plugin si vous n'avez pas de système de() l'accès

REMARQUE: ceci peut créer une plus grande taille bien plus petite des dimensions de l'image due à la coalescence essentiellement deoptimizing l'image.

Mise à JOUR: Si vous n'avez pas ImageMagick d'accès, vous devriez être en mesure d'utiliser une combinaison des étapes suivantes pour redimensionner un gif animé (en supposant que vous avez GD accès):

  1. Détecter si l'image est un gif animé: puis-je détecter les gifs animés à l'aide de php et gd? (en haut à répondre)
  2. Diviser le gif animé en images: http://www.phpclasses.org/package/3234-PHP-Split-GIF-animations-into-multiple-images.html
  3. Redimensionner les images individuelles: http://www.akemapa.com/2008/07/10/php-gd-resize-transparent-image-png-gif/
  4. Recomposite les images pour en faire un gif animé à nouveau: http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html

C'est certainement beaucoup plus intensive que la ImageMagick route, mais il doit être techniquement possible.

Si vous obtenez ce travail, s'il vous plaît partager avec le monde entier!

12voto

nut Points 356

Essayez GDEnhancer http://www.gdenhancer.com Il suffit d’utiliser la bibliothèque GD et de garder une animation gif

11voto

cherouvim Points 18550

Vous devez décomposer le gif en images, vignettes et réassembler.
Regardez ImageMagick: http://php.net/imagick et ce tutoriel: http://www.phpro.org/examples/Thumbnail-From-Animated-GIF.html

6voto

Antony Harder Points 173

J'ai essayé de nombreux exemples de redimensionnement de GIF animés avec le module PHP Imagick, mais aucun d'entre eux n'a fonctionné pour moi. Puis, après un certain temps de débogage, j'ai trouvé le problème: l'animation a été perdue lors de l'enregistrement de l'image sur le disque, de $animation->writeImage($file_dst); ou $animation->writeImages($file_dst, true);

Je l'ai changé en file_put_contents($file_dst, $animation->getImagesBlob()); et la plupart des exemples ont commencé à fonctionner immédiatement.

J'espère que ça aide quelqu'un.

4voto

Matt Crossley Points 41

L'exemple sur http://www.php.net/manual/en/imagick.coalesceimages.php redimensionnera votre gif tout en conservant la synchronisation de votre cadre. Ce que la plupart des autres exemples ne font pas.

D'autres exemples reconstruisent le gif alors que celui-ci vous permet de modifier les cadres de l'image.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X