Создать анимированный GIF-файл с помощью библиотеки GD - PullRequest
6 голосов
/ 08 сентября 2011

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

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

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

Ответы [ 3 ]

4 голосов
/ 09 ноября 2011

Этого нельзя сделать с помощью 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 и мультизагрузку jQuery.

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

2 голосов
/ 08 сентября 2011

Хорошо, поиск в 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 также является примером

удачи

0 голосов
/ 08 сентября 2011

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

...