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

9 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

williamrlazenby
williamrlazenby

@Tomm1 I just ran across this blog. I will try to duplicate your problem with the files provided in the .zip either tonight or tomorrow and get back with you on the results. I suspect that your PHP script is interpreting something as a constant that isn't rather than you needing to install anything extra. This can sometimes be caused by the lack of quotes around data.


What version of PHP are you using?

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!