https://github.com/devongovett/png-stream
A streaming PNG encoder and decoder
https://github.com/devongovett/png-stream
Last synced: over 1 year ago
JSON representation
A streaming PNG encoder and decoder
- Host: GitHub
- URL: https://github.com/devongovett/png-stream
- Owner: devongovett
- Created: 2014-11-17T03:26:37.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2017-09-07T03:04:32.000Z (almost 9 years ago)
- Last Synced: 2024-04-14T08:33:48.490Z (about 2 years ago)
- Language: JavaScript
- Size: 1.54 MB
- Stars: 29
- Watchers: 5
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# png-stream
A streaming PNG encoder and decoder for Node and the browser.
Supports [animated PNGs](https://wiki.mozilla.org/APNG_Specification) and
normal still PNGs.
## Installation
npm install png-stream
For the browser, you can build using [Browserify](http://browserify.org/).
## Decoding
This example uses the [concat-frames](https://github.com/devongovett/concat-frames)
module to collect the output of the PNG decoder into an array of frame objects.
```javascript
var PNGDecoder = require('png-stream/decoder');
var concat = require('concat-frames');
// decode a PNG file to RGB pixels
fs.createReadStream('in.png')
.pipe(new PNGDecoder)
.pipe(concat(function(frames) {
// frames is an array of frame objects
// each one has a `pixels` property containing
// the raw RGB pixel data for that frame, as
// well as the width, height, etc.
}));
```
## Encoding
You can encode a PNG by writing or piping pixel data to a `PNGEncoder` stream.
The PNG encoder supports writing data in the RGB, RGBA, grayscale (`gray`),
and grayscale + alpha (`gray`) color spaces. You can also write data in the
`indexed` color space by first quantizing it using the [neuquant](https://github.com/devongovett/neuquant)
module.
```javascript
var PNGEncoder = require('png-stream/encoder');
var neuquant = require('neuquant');
// convert a JPEG to a PNG
fs.createReadStream('in.jpg')
.pipe(new JPEGDecoder)
.pipe(new PNGEncoder)
.pipe(fs.createWriteStream('out.png'));
// write indexed data
fs.createReadStream('in.jpg')
.pipe(new JPEGDecoder)
.pipe(new neuquant.Stream)
.pipe(new PNGEncoder)
.pipe(fs.createWriteStream('indexed.png'));
```
## License
MIT