var rice = require('./index')
, decoder = rice.decode()
, encoder = rice.encode()
// read a PNG and output a new PNG with metadata
fs.createReadStream('in.png')
.pipe(decoder)
.on('data', function(chunk) {
if(chunk.type() !== 'IEND') {
return
}
// emit a "tEXt" chunk containing metadata
// before IEND
decoder.emit('data', rice.text('key', JSON.stringify({
'hello': 'world'
})))
})
.pipe(encoder)
.pipe(fs.createWriteStream('out.png'))
chunky-rice
is a module that provides a decoder that takes
binary data and outputs Chunk
objects (allowing you to manipulate
a PNG on the fly); as well as a encoder that takes these Chunk
objects
and turns them back into a binary stream.
Both the encoder and decoder are through streams.
chunky-rice
provides porcelin methods for generating your own chunks,
and also, loves you unconditionally.
$ npm install chunky-rice
Returns the rice
module.
Creates a binary-to-Chunk through stream. Pausable and resumable.
Creates a Chunk-to-binary through stream. Pausable and resumable.
Creates a Chunk of the provided type with the provided data. CRC and length data is
not necessary -- data
should only contain the chunk data!
Creates a tEXt chunk with a key of key
and a value of value
.
Returns the string representation of the chunk type.
If the chunk is a tEXt
chunk, returns the key data.
Otherwise returns null
.
If the chunk is a tEXt
chunk, returns the value data.
Otherwise returns null
.
Cached. If not pre-computed, recomputes the CRC of the provided data and type and writes it to the Chunk's backing store.
Cached. Returns the buffer representing the full data of the chunk (to include the 4 byte length, 4 byte type, data segment, and 4 byte CRC).
Modify an in-flight chunk -- only available on chunks sent via decoder data
events.
Automatically calls decoder.pause()
on its source stream, and decoder.resume()
once
the ready callback has been called.
fs.createReadStream('thing.png')
.pipe(rice.decoder())
.on('data', function(chunk) {
if(chunk.type() !== 'tEXt')
return
chunk.modify(function(ready) {
setTimeout(function() {
ready(null, new Buffer("hello\x00world"))
}, 100)
})
})
.pipe(rice.encoder())
.pipe(fs.createWriteStream('thing_out.png'))
MIT.