Howto: Generate animated GIF with PHP

0407c112bb0395290e02e250fd4e4c96

Recently I was asked if it was possible to generate animated GIFs with PHP GD.
Knowing that it’s not possible to do this with PHP GD directly, I still wanted to try if it would be possible with some other PHP solutions.
After searching the web I found the ‘GIFEncoder.class’ by László Zsidi on phpclasses.org

In this blogpost I’ll write a small demo on generating an animated gif with this class. We’ll merge 2 PNG files, and add some text to them before mergin into the animated GIF.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
header ('Content-type:image/gif');
include('GIFEncoder.class.php');
$text = "Hello World";

// Open the first source image and add the text.
$image = imagecreatefrompng('source01.png');
$text_color = imagecolorallocate($image, 200, 200, 200);
imagestring($image, 5, 5, 5,  $text, $text_color);

// Generate GIF from the $image
// We want to put the binary GIF data into an array to be used later,
//  so we use the output buffer.
ob_start();
imagegif($image);
$frames[]=ob_get_contents();
$framed[]=40;

// Delay in the animation.
ob_end_clean();

// And again..
// Open the first source image and add the text.
$image = imagecreatefrompng('source02.png');
$text_color = imagecolorallocate($image, 200, 200, 200);
imagestring($image, 5, 20, 20,  $text, $text_color);

// Generate GIF from the $image
// We want to put the binary GIF data into an array to be used later,
//  so we use the output buffer.
ob_start();
imagegif($image);
$frames[]=ob_get_contents();
$framed[]=40;

// Delay in the animation.
ob_end_clean();

// Generate the animated gif and output to screen.
$gif = new GIFEncoder($frames,$framed,0,2,0,0,0,'bin');
echo $gif->GetAnimation();

To save the animated gif to file: Remove the header(); call on top, and instead of echo $gif->GetAnimation(); add the next lines at the bottom.

1
2
3
$fp = fopen('animegif.gif', 'w');
fwrite($fp, $gif->GetAnimation());
fclose($fp);

This will save an animated gif file named ‘animegif.gif’ in the current folder, _if_ the folder has write permissions.

Download Animated GIF demo

animegif.zip

Tags: ,