diff --git a/lib/packer.js b/lib/packer.js index d0336b1..325c83d 100755 --- a/lib/packer.js +++ b/lib/packer.js @@ -23,12 +23,16 @@ var Packer = module.exports = function(options) { util.inherits(Packer, Stream); -Packer.prototype.pack = function(data, width, height) { +Packer.prototype.pack = function(data, width, height, gamma) { // Signature this.emit('data', new Buffer(constants.PNG_SIGNATURE)); this.emit('data', this._packIHDR(width, height)); + if (gamma) { + this.emit('data', this._packGAMA(gamma)); + } + // filter pixel data //TODO {} var filter = new Filter(width, height, 4, 8, false, this._options, {}); @@ -70,6 +74,12 @@ Packer.prototype._packChunk = function(type, data) { return buf; }; +Packer.prototype._packGAMA = function(gamma) { + var buf = new Buffer(4); + buf.writeUInt32BE(Math.floor(gamma * 100000), 0); // TODO constant + return this._packChunk(constants.TYPE_gAMA, buf); +}; + Packer.prototype._packIHDR = function(width, height) { var buf = new Buffer(13); diff --git a/lib/parser.js b/lib/parser.js index b2730f5..500f05f 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -249,7 +249,7 @@ Parser.prototype._handleGAMA = function(length) { Parser.prototype._parseGAMA = function(data) { this._crc.write(data); - this.gamma(data.readUInt32BE(0) / 100000); + this.gamma(data.readUInt32BE(0) / 100000); //TODO constant this._handleChunkEnd(); }; diff --git a/lib/png.js b/lib/png.js index 65cd6a0..eedc535 100755 --- a/lib/png.js +++ b/lib/png.js @@ -55,7 +55,7 @@ PNG.prototype.pack = function() { } process.nextTick(function() { - this._packer.pack(this.data, this.width, this.height); + this._packer.pack(this.data, this.width, this.height, this.gamma); }.bind(this)); return this; diff --git a/package.json b/package.json index 665b8ee..a1f5ec6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pngjs2", "version": "0.0.3", - "description": "Pure JS PNG encoder/decoder", + "description": "PNG encoder/decoder in pure JS, supporting any bit size & interlace, async & sync with full test suite.", "contributors": [ "Alexandre Paré", "Gaurav Mali", diff --git a/test/convert-images.js b/test/convert-images.js index f2b23be..8ae5fde 100644 --- a/test/convert-images.js +++ b/test/convert-images.js @@ -57,7 +57,7 @@ module.exports = function(done) { } else { var outpng = new PNG(); - //PNG.adjustGamma(png); + outpng.gamma = png.gamma; outpng.data = png.data; outpng.width = png.width; outpng.height = png.height; @@ -82,7 +82,6 @@ module.exports = function(done) { if (expectedError) { console.log("Async: Error expected, parsed fine ..", file); } - //this.adjustGamma(); this.pack() .pipe(