Skip to content
Unifies node-png, node-jpeg and node-gif (for great good)
Latest commit ccf7374 Feb 2, 2012 @pkrumins v1.0.1 now
Failed to load latest commit information.
lib get rid of SyncImage and SyncStack, merge .encodeSync() into Image an… Aug 17, 2010
.npmignore added .npmignore and .gitignore Aug 2, 2010
package.json v1.0.1 now Feb 2, 2012


This is a node.js module that unifies node-png, node-gif and node-jpeg modules.

It was written by Peteris Krumins (
His blog is at  --  good coders code, great reuse.



Node-image module abstracts over node-png, node-gif and node-jpeg modules.
It exports `Image`, and `Stack` objects.

Use the `Image` object to encode individual images of a specific width and
height synchronously (blocking) and asynchronously.

Here is an example that encodes the images synchronously:

    var Image = require('image');

    var png = new Image('png').encodeSync(buffer, width, height);
    var gif = new Image('gif').encodeSync(buffer, widht, height);
    var jpeg = new Image('jpeg').encodeSync(buffer, width, height);

Use `.encode` function to do the same asynchronously. Pass it a callback with
two arguments:

    var Image = require('image');
    (new Image('png')).encode(buffer, width, height,
        function (data, error) {
            // 'data' contains the png image

The buffers must be of node's `Buffer` type and they must hold either RGB, BGR,
RGBA or BGRA values. `Image` object defaults to RGB. To use a differnet buffer
type, pass it as the 2nd argument to `Image's` constructor:

    var png = new Image('png', 'bgra').encodeSync(buffer, 800, 600);

The `Stack` object is used to create dynamic stacks of images in sync and async

What I mean by that is that you can push an image to position (x, y) = (20, 40)
and then push another image to position (x, y) = (1000, 2000), and the image
will grow dynamically. Here is hot to use it:

    var Stack = require('image').Stack;

    var pngStack = new Stack('png');
    pngStack.push(buffer, x, y, width, height);
    var png = pngStack.encodeSync();
    console.dir(png.dimensions()); // prints dynamic png's dimensions

And the same asynchronously:

    var Stack = require('image').Stack;

    var pngStack = new Stack('png');
    pngStack.push(buffer, x, y, width, height);
    pngStack.encode(function (data, dims, error) {
        // 'data' contains the png image and 'dims' contains its dynamic dimensions

See tests/ directory for some examples, it comes with a BGR buffer for testing.
First unpack it:

    tar -xjf desktop.tar.bz2

Then run any of sync.js, async.js, sync-stack.js, async-stack.js examples.


This module depends on:

    * node-png:
    * node-gif:
    * node-jpeg:

Each of these modules comes with documentation. Follow the installation steps
to get them installed.

The steps for all the modules are all the same, run:

    node-waf configure build

in each module's directory.


Have fun producing images!

Peteris Krumins

Something went wrong with that request. Please try again.