PHP class to create an animated GIF from multiple images
PHP
Pull request Compare This branch is 118 commits ahead of Sybio:master.
Latest commit 1676cb2 Dec 15, 2016 @lunakid committed on GitHub Merge pull request #1 from lucanos/master
Fixes Non-Looped GIFs
Permalink
Failed to load latest commit information.
src/GifCreator Fixes Non-Looped GIFs Oct 13, 2016
test Image dir added May 31, 2014
CHANGES.txt Todo item added May 31, 2014
README.md Some clarifications May 31, 2014
composer.json Updated the meta stuff only, but NOT TESTED! Apr 24, 2014

README.md

NOTE: This is a fork of Clément Guillemain's nice GifCreator class, with some API changes (class rename, new & updated methods, more flexible (and robust) parameter handling etc.), better error handling, several small corrections, code cosmetics & other improvements scattered all across.

About

AnimGif is a PHP class to create animated GIFs -- just list the source images (in various forms), and that's it!

Usage

1. Inputs:

// Use an array containing file paths, resource vars (initialized with imagecreatefromXXX), 
// image URLs or binary image data.
$frames = array(
    imagecreatefrompng("/../images/pic1.png"),      // resource var
    "/../images/pic2.png",                          // image file path
    file_get_contents("/../images/pic3.jpg"),       // image binary data
    "http://thisisafakedomain.com/images/pic4.jpg", // URL
);

// Or: load images from a dir (sorted, skipping .files):
//$frames = "../images";

// Optionally: set different durations (in 1/100s units) for each frame
$durations = array(20, 30, 10, 10);

// Or: you can leave off repeated values from the end:
//$durations = array(20, 30, 10); // use 10 for the rest
// Or: use 'null' anywhere to re-apply the previous delay:
//$durations = array(250, null, null, 500);

2. Create the GIF:

$anim = new GifCreator\AnimGif();
$anim->create($frames, $durations);

// Or: using the default 100ms even delay:
//$anim->create($frames);

// Or: loop 5 times, then stop:
//$anim->create($frames, $durations, 5); // default: infinite looping

3. Get/use the result:

You can now get the animated GIF binary:

$gif = $anim->get();

...and e.g. send it directly to the browser:

header("Content-type: image/gif");
echo $gif;
exit;

Or just save it to a file:

$anim->save("animated.gif");

Behavior

  • Transparency is based on the first frame. [!!NOT VERIFIED: "It will be saved only if you give multiple frames with the same transparent background"]
  • The dimensions of the generated GIF are based on the first frame, too. If you need to resize your images to get the same dimensions, you can use this class: https://github.com/Sybio/ImageWorkshop.

Dependencies

  • PHP 5.3 (for namespace support & whatnot; noone still shamelessly uses PHP < 5.3, right?!)
  • GD (imagecreatefromstring, imagegif, imagecolortransparent)

Credits