Create an animated gif using the GD library

If I have a bunch of image resources that I created using the GD library in php, or, otherwise, a bunch of frames, how can I combine them into an animated gif? I have an array of images and frames per second that I would like to add.

I cannot use ImageMagick or FFMPEG, and I would rather just use the GD library if possible.

Apparently "Support for creating GIF animations is also available." but I cannot find documentation on how to access this from PHP?

+6
source share
3 answers

A Google search showed GIFEncoder.class.php found at http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html
This link requires registration.

So, I searched a bit and it is included in phpvideotoolkit on code.google.com and can be downloaded to:
http://phpvideotoolkit.googlecode.com/svn-history/r6/trunk/phpvideotoolkit/adapters/ffmpeg-php/gifencoder/GIFEncoder.class.php

There is also a bug fix version, just change the file name to GIFEncoder.class.phpvideotoolkit.php in the link above.

I have not tried it myself, but maybe this can help you.

an example is also shown in the parent directory of the php file on code.google.com

Good luck.

+2
source

This cannot be done with GD, but I found a great library for it. This is a bit complicated, therefore, here is a link to a library that makes animated gifs with php. It explains how to use it fully. http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html

You can see my example using this library:

Just select 2 images and write 100 for a speed of 900 for width and height. He puts them in an animated gif slideshow.

Here is the code for this script:

<?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> 

As you can see, it refers to the GIFEncoder class found at the first link. It also uses some javascript validation and multiupload jQuery.

By the way, this question has already been asked.

+4
source

AFAIK gd lib associated with PHP does not support the creation of animated GIFs. You can use gifsicle though.

0
source

Source: https://habr.com/ru/post/896827/


All Articles