Node bindings for Zopfli Compression Algorithm (zlib, gzip, deflate compatible)
C++ JavaScript Python Other
Pull request Compare This branch is 121 commits behind pierreinglebert:master.
Latest commit 8ed5911 May 12, 2014 @pierreinglebert pierreinglebert Merge pull request #7 from duralog/node-11-13
update to nan-1.0.0 for node-11 support
Permalink
Failed to load latest commit information.
bin
examples uso node-pre-gyp Apr 24, 2014
lib fix default options merging Apr 25, 2014
scripts
src update to nan-1.0.0 for node-11 support May 11, 2014
test update to nan-1.0.0 for node-11 support May 11, 2014
zopfli @ c54dc20 first commit Jul 16, 2013
.gitignore uso node-pre-gyp Apr 24, 2014
.gitmodules first commit Jul 16, 2013
.npmignore use node-pre-gyp to require binding Apr 24, 2014
.travis.yml make travis happy... ;) May 12, 2014
Makefile uso node-pre-gyp Apr 24, 2014
README.md update doc Apr 26, 2014
binding.gyp uso node-pre-gyp Apr 24, 2014
package.json make sure the submodule exists for install May 11, 2014

README.md

node-zopfli

Bindings for Zopfli compressing lib. Compress gzip files 5% better than gzip.

Build Status Coverage Status Dependency Status Stories in Ready

Prerequisites for building

USAGE

Install

npm install node-zopfli

or if you want zopfli binary globally

npm install -g node-zopfli

Binary (from command line)

To gzip a file

zopfli file.txt

To compress a png file

zopflipng file.png out.png

Api

Stream (async):

var zopfli = require("node-zopfli");
fs.createReadStream('file.js')
  .pipe(zopfli.createGzip(options))
  .pipe(fs.createWriteStream('file.js.gz'));

Instead of zopfli.createGzip, you can also use

new Zopfli("gzip", options);

Buffer (async):

var zopfli = require("node-zopfli");
var input = new Buffer('i want to be compressed');
zopfli.deflate(input, options, function(err, deflated) {});
zopfli.zlib(input, options, function(err, zlibed) {});
zopfli.gzip(input, options, function(err, gziped) {});

Buffer (sync):

var zopfli = require("node-zopfli");
var input = new Buffer('i want to be compressed');
var deflated = zopfli.deflateSync(input, options);
var zlibed = zopfli.zlibSync(input, options);
var gziped = zopfli.gzipSync(input, options);

Options

Here are the options with defaults values you can pass to zopfli :

{
  verbose: false,
  verbose_more: false,
  numiterations: 15,
  blocksplitting: true,
  blocksplittinglast: false,
  blocksplittingmax: 15
}

numiterations

Maximum amount of times to rerun forward and backward pass to optimize LZ77 compression cost. Good values: 10, 15 for small files, 5 for files over several MB in size or it will be too slow.

blocksplitting

If true, splits the data in multiple deflate blocks with optimal choice for the block boundaries. Block splitting gives better compression.

blocksplittinglast

If true, chooses the optimal block split points only after doing the iterative LZ77 compression. If false, chooses the block split points first, then does iterative LZ77 on each individual block. Depending on the file, either first or last gives the best compression.

blocksplittingmax

Maximum amount of blocks to split into (0 for unlimited, but this can give extreme results that hurt compression on some files).

#Build from sources

git clone --recursive https://github.com/pierreinglebert/node-zopfli
node-gyp configure
node-gyp build

Tests

mocha is used for tests, you can run them with :

npm test