You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.9 KiB
65 lines
1.9 KiB
pngparse
|
|
========
|
|
|
|
`pngparse` is a pure-JavaScript library for [Node.JS](http://nodejs.org/) for
|
|
converting a PNG file into an array of pixel values. It came out of a need for
|
|
reading PNG images in Node.JS for the [Dark Sky
|
|
API](http://developer.darkskyapp.com/), but all existing libraries either had
|
|
compilation issues or did not support enough of the PNG standard to be
|
|
practical.
|
|
|
|
There's a reason nobody writes PNG-parsing libraries. This stuff is complicated
|
|
and reinventing the wheel is dumb. But, if you're wondering whether you can
|
|
trust it, it has a full unit test suite and we've been using it in production
|
|
since Sep 2012, so there you go.
|
|
|
|
It's reasonably complete, covering most PNG color types, depths, and filters;
|
|
notable omissions are lack of support for 16-bit images and interlacing.
|
|
|
|
Comments, bug fixes, feature improvements, etc. are all welcome. If you do
|
|
write code, please ensure that you write tests for it!
|
|
|
|
Usage
|
|
-----
|
|
|
|
To install:
|
|
|
|
npm install pngparse
|
|
|
|
To use:
|
|
|
|
var pngparse = require("pngparse")
|
|
|
|
...
|
|
|
|
pngparse.parse(buffer, function(err, data) {
|
|
if(err)
|
|
throw err
|
|
|
|
/* do things! */
|
|
})
|
|
|
|
...
|
|
|
|
pngparse.parseFile("path/to/file.png", function(err, data) {
|
|
if(err)
|
|
throw err
|
|
|
|
/* do things! */
|
|
})
|
|
|
|
The `data` object returned from the callback bears a striking resemblance to
|
|
the [HTML5 Canvas ImageData
|
|
object](https://developer.mozilla.org/en-US/docs/DOM/ImageData). A notable
|
|
distinction is that the object returns has a `channels` property which
|
|
indicates how many color channels it uses (while an HTML5 ImageData object is
|
|
always 4-channel). The possible color channel combinations are as follows:
|
|
|
|
1 channel : grayscale
|
|
2 channels: grayscale + alpha
|
|
3 channels: RGB
|
|
4 channels: RGBA
|
|
|
|
If you use the `ImageData.prototype.getPixel` method, this is handled for you;
|
|
however, if you access the `data` array manually, then you will have to be
|
|
aware of it.
|
|
|