Giter Site home page Giter Site logo

movemegif's Introduction

movemegif

An Animated GIF creation library in pure PHP.

This library focuses on the use of GD in the creation of animated gif images.

  • Requires PHP 5.3 or higher.
  • Requires GD library (use apt-get install php5-gd or similar, to install)

Features

  • Looping
  • Frame positioning (left, top)
  • Clipping of frame areas.
  • Specifying a color for transparent pixels
  • The duration of a frame in 1/100s of a second
  • Explicit use of global and local color tables (default = global)
  • End-of-frame actions: leave as is (= default), restore to previous frame, restore to background
  • Adding comments

There are three ways to create a frame:

  • Use an existing image (FileImageCanvas)
  • Create a frame with GD lib functions (GdCanvas)
  • Create frames based on a string of indexes and a color table array (StringCanvas)

About speed

The library uses GD's imagegif function to generate frames quickly. But in some cases it cannot be used, and compression is done in PHP, which is much slower.

  • Frames are fast when GdCanvas or FileImageCanvas is used in combination with a local color table (the default).
  • Frames are much slower when the global color table is used. However this frame takes up less space in the GIF.
  • Frames are also much slower when StringCanvas is used.

Comments

  • A duration of 2/100-ths of a second is the minimum, since browsers impose a slowness fine for values of 0 and 1.
  • GIF (or rather Netscape's Application Block) does not allow you to start looping a subset of all frames.
  • While GIF allows you to restore to background color at the end of a frame, browsers interpret this by "restoring" to the pixels that show though from the page on which the image is located.
  • The global color table is a color table that is shared by all frames that use it. Use the global color table only when space requirements are much more important than GIF creation time requirements.

Thanks a great deal to Matthew Flickinger for writing an awesome GIF format explanation

Examples

The source code (directory "example") contains a few examples to help you on the way.

Each example shows a different animation strategy. Choose the strategy that best suits your needs. Combinations of the strategies are also possible, since all settings are done on the frame level.

Horse

The Horse example shows how to animate a series of same-sized images.

Horse

The horse image was taken from Wikipedia

Moki

In this example we find Moki running in the mountains.

Frame 1 shows a background JPEG image. The following 46 frames show 10 different poses of Moki on different horizontal positions. These are transparent GIF images that are drawn and erased per frame.

The strategy here is to start with a background image and use "restore to previous frame" to paint the pictures of the dog on top of it. For each frame of the dogs animation, the GIF renderer draws the image (with transparent background), waits for the duration of the frame, and then puts the image back into the state where it was before the image was drawn. This way, the background image remains and is ready to receive the next image of the dog.

This strategy helps keep the GIF image small, since the background does not need to be stored for every frame. But is also has an important drawback: in a looping, when all frames have drawn, a completely empty background image will be drawn. If the dog would be on a visible position at that time, it would disappear for an instance.

Moki

Pong

The elaborate PONG example shows how you can keep the filesize small while creating a large number of frames, by the use of

  • Clipping: mark the area that you want redrawn in the frame. The library turns that clipping area into a frame.
  • Stepping: use multiple frames for a single step of your animation, to minimize the area that needs to be redrawn.

In this example a complete frame takes 5kB in the compressed GIF format. The animation takes 270 steps and would take over a MB if unclipped frames were used. Using the two techniques, the image just takes 179 kB.

The strategy here is to draw each frame completely (with GD lib), but to create frames only of the areas of the image that have changed.

Pong

Related

Another PHP animated GIF library was written by László Zsidi and can be found at phpclasses.org

The standard GIF library is written in C and can be found here

The GIF 89a specification is located here

movemegif's People

Contributors

garfix avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.