Создание анимированного gif с использованием библиотеки GD

Если у меня есть куча ресурсов изображения, которые я создал с помощью библиотеки GD в php, или, иначе, с кучей фреймов, как я могу объединить их в анимированный gif? У меня есть массив изображений и кадров в секунду, которые я бы хотел добавить.

Я не могу использовать ImageMagick или FFMPEG, и я предпочел бы просто использовать GD-библиотеку, если это возможно.

По-видимому, также доступна поддержка создания GIF-анимаций. , но я не могу найти документацию о том, как получить доступ к этому изнутри PHP?

Поиск в Google показал GIFEncoder.class.php на http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html
Эта ссылка требует регистрации.

Поэтому я немного искал, и он включен в phpvideotoolkit на code.google.com и может быть загружен по адресу:
http://phpvideotoolkit.googlecode.com/svn-history/r6/trunk/phpvideotoolkit/adapters/ffmpeg-php/gifencoder/GIFEncoder.class.php

есть также версия с исправлением ошибок, просто измените имя файла на GIFEncoder.class.phpvideotoolkit.php в приведенной выше ссылке.

Я сам не пробовал, но, может быть, это может вам помочь.

в родительском каталоге php-файла на code.google.com также является примером

удачи

Этого нельзя сделать с GD, но я нашел для него отличную библиотеку. Это немного сложно, поэтому, вот ссылка на библиотеку, которая делает анимированные gif с php. В нем объясняется, как использовать его полностью. http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html

Вы можете посмотреть мой пример с помощью этой библиотеки:

Просто выберите 2 снимка и напишите 100 для скорости 900 по ширине и высоте. Он поместит их в анимированное слайд-шоу gif.

Вот код для этого скрипта:

<?php if(isset($_POST['speed'])) { header('Content-type: image/gif'); if(isset($_POST['download'])){ header('Content-Disposition: attachment; filename="animated.gif"'); } include('GIFEncoder.class.php'); function frame($image){ ob_start(); imagegif($image); global $frames, $framed; $frames[]=ob_get_contents(); $framed[]=$_POST['speed']; ob_end_clean(); } foreach ($_FILES["images"]["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["images"]["tmp_name"][$key]; $im = imagecreatefromstring(file_get_contents($tmp_name)); $resized = imagecreatetruecolor($_POST['width'],$_POST['height']); imagecopyresized($resized, $im, 0, 0, 0, 0, $_POST['width'], $_POST['height'], imagesx($im), imagesy($im)); frame($resized); } } $gif = new GIFEncoder($frames,$framed,0,2,0,0,0,'bin'); echo $gif->GetAnimation(); } ?> <form action="" method="post" enctype="multipart/form-data"> <script src="http://code.jquery.com/jquery-latest.js"></script> <script src="jquery.MultiFile.js"></script> <script src="jquery.placeholder.js"></script> <input type="file" name="images[]" class="multi" /> <script> $(function(){ $('input[placeholder], textarea[placeholder]').placeholder(); }); </script> <SCRIPT language=Javascript> <!-- function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } //--> </SCRIPT> <input name="speed" maxlength="10" type="text" placeholder="Speed of frames in ms" onkeypress="return isNumberKey(event)"> <input name="width" maxlength="4" type="text" placeholder="Width" onkeypress="return isNumberKey(event)"> <input name="height" maxlength="4" type="text" placeholder="Height" onkeypress="return isNumberKey(event)"> <input type="submit" name="download" value="Download!"> <input type="submit" name="preview" value="Preview!"> </form> 

Как вы видите, он ссылается на класс GIFEncoder, найденный по первой ссылке. Он также использует некоторую проверку javascript и multi-загрузку jQuery.

Кстати, этот вопрос уже задавался.

AFAIK gd lib, связанный с PHP, не поддерживает создание анимированных GIF. Однако вы можете использовать gifsicle .