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: ,

8 comments
Tomm1
Tomm1

This is an old blog. Hope you are still listening.

 

I tried to run the example. I got 4 errors from line 39 of the gif.php file.

 

  PHP Notice:  Use of undefined constant ERR01

  PHP Notice:  Use of undefined constant ERR02

  PHP Notice:  Use of undefined constant ERR03

  PHP Notice:  Use of undefined constant ERR04

 

Was I supposed to install another php item (atp-get ...) ?

 

Also, when I get this going, I will need to make the gif file loop.

Is that possible.

Thanks, Tomm

Lachee
Lachee

It doesn't seem to work with png's that generate through a separate php script. Is there any way around this?

kerimov
kerimov

How to ad font and fontsize function in this script?

josue
josue

I cant download the source file :[

J Ras
J Ras

Great article! Great help!How can I save the output as a file on the server?

Matt
Matt

Wow thank you for writing this tutorial--I spent a long time trying to figure out how to create a GIF from PNG sources using PHP.Thanks again!

Jeroen
Jeroen

Looking at Imagestring() function on php.net you can see that the 2nd parameter is used for the font.