2012-02-23 4 views
5

Je peux le faire facilement dans mon OSFaire un GIF animé avec ImageMagick PHP API

convert -delay 1/1 -loop 0 *.gif animated.gif 

Mais je ne peux pas trouver comment faire cela dans l'API PHP. Pas de redimensionnement ou quoi que ce soit nécessaire, je viens d'avoir un ensemble de cadres qui ont besoin d'animation.

+0

Pour commencer, vous pouvez utiliser [l'opérateur d'exécution] (http://php.net/manual/fr/language.operators.execution.php) (en arrière-plan): '\' convert -delay 1/1 -loop 0 * .gif animated.gif \ ''. – hakre

+0

ou le 'exec()' mais c'est très brouillon et j'ai déclaré que je veux utiliser l'API – jdborg

+0

Oui, c'est plus un commentaire que la réponse réelle. Que dit le manuel? Il devrait offrir une interface je pense. – hakre

Répondre

13

Même si je ne suis pas un expert PHP, je sais que ce problème n'est pas trop difficile. Ce que vous voulez faire est de créer un objet Imagick auquel vous pouvez ajouter vos images. Avec chaque image, vous pouvez modifier les paramètres comme le timing etc.

En supposant que vous travaillez avec des images téléchargées à partir d'un formulaire Web de base, j'ai écrit un exemple de base qui passe en revue les images qui ont été téléchargées avec un nom de " image0 ", où" 0 "monte à autant de fichiers sont inclus. Vous pouvez naturellement ajouter des images en utilisant les mêmes méthodes sur des noms de fichiers fixes ou autres.

$GIF = new Imagick(); 
$GIF->setFormat("gif"); 

for ($i = 0; $i < sizeof($_FILES); ++$i) { 
    $frame = new Imagick(); 
    $frame->readImage($_FILES["image$i"]["tmp_name"]); 
    $frame->setImageDelay(10); 
    $GIF->addImage($frame); 
} 

header("Content-Type: image/gif"); 
echo $GIF->getImagesBlob(); 

Cet exemple crée un objet Imagick qui deviendra notre GIF. Les fichiers qui ont été téléchargés sur le serveur sont ensuite bouclés et chacun est d'abord lu (souvenez-vous cependant que cette technique repose sur le fait que les images sont nommées comme je l'ai décrit ci-dessus), deuxièmement, il reçoit une valeur de retard et troisièmement le GIF-à-être. C'est l'idée de base, et cela produira ce que vous recherchez (j'espère).

Mais il y a beaucoup à trafiquer, et votre configuration peut être différente. J'ai toujours trouvé la référence php.net Imagick API comme un genre de sucer, mais c'est toujours agréable à utiliser et je l'utilise de temps en temps pour référencer des choses à partir de l'ImageMagick standard.

Espérons que cela correspond un peu à ce que vous recherchiez.

+0

+1 pour la réponse bien écrite mais cela ne semble pas fonctionner. Je fais un tableau de fichiers, puis j'écoute chacun avec le code que vous avez fait (et le dernier exemple ici http://www.php.net/manual/fr/imagick.addimage.php) mais tout ce que je vois est la dernière image. Même si je mets 500ms et attends. Je voudrais boucler et ne peux pas trouver cela non plus. – jdborg

+0

Ah, ce travail si vous utilisez writeImages plutôt qu'écho. Je préférerais faire écho cependant. Des idées? – jdborg

+0

Mon mauvais, j'ai oublié un détail important là, éditant la réponse :) La méthode getImagesBlob() correspond à mettre le deuxième argument dans writeImages() à vrai. Et cela fera l'écho d'un GIF animé comme un blob, ce qui devrait fonctionner. – fredrikekelund