Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
N

node-image

> 编程语言
Open source

Unifies node-png, node-jpeg and node-gif (for great good)

100 stars0 likes1 views
WebsiteGitHub

About

Unifies node-png, node-jpeg and node-gif (for great good)

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

It was written by Peteris Krumins ([email protected]). His blog is at http://www.catonmat.net -- good coders code, great reuse.


Overview

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 manner.

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.

Dependencies

This module depends on:

* node-png:  http://github.com/pkrumins/node-png
* node-gif:  http://github.com/pkrumins/node-gif
* node-jpeg: http://github.com/pkrumins/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!

Sincerely, Peteris Krumins http://www.catonmat.net

Issues· 5 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

JavaScript

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 18, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言