UNPKG

color-transform

Version:
203 lines (165 loc) 9.87 kB
var ColorTransform = require('../'); var PassThrough = require('stream').PassThrough; var assert = require('assert'); describe('color-transform', function() { describe('transform functions', function() { it('rgb2rgba', function() { assert.deepEqual(ColorTransform.rgb2rgba(new Buffer([ 250, 100, 4 ])), new Buffer([ 250, 100, 4, 255 ])); assert.deepEqual(ColorTransform.rgb2rgba(new Buffer([ 250, 100, 4, 1 ])), new Buffer([ 250, 100, 4, 255 ])); assert.deepEqual(ColorTransform.rgb2rgba(new Buffer([ 250, 100, 4, 1, 4, 2 ])), new Buffer([ 250, 100, 4, 255, 1, 4, 2, 255 ])); }); it('rgb2gray', function() { assert.deepEqual(ColorTransform.rgb2gray(new Buffer([ 250, 100, 4 ])), new Buffer([ 124 ])); assert.deepEqual(ColorTransform.rgb2gray(new Buffer([ 250, 100, 4, 1 ])), new Buffer([ 124 ])); assert.deepEqual(ColorTransform.rgb2gray(new Buffer([ 250, 100, 4, 1, 4, 2 ])), new Buffer([ 124, 3 ])); }); it('rgb2graya', function() { assert.deepEqual(ColorTransform.rgb2graya(new Buffer([ 250, 100, 4 ])), new Buffer([ 124, 255 ])); assert.deepEqual(ColorTransform.rgb2graya(new Buffer([ 250, 100, 4, 1 ])), new Buffer([ 124, 255 ])); assert.deepEqual(ColorTransform.rgb2graya(new Buffer([ 250, 100, 4, 1, 4, 2 ])), new Buffer([ 124, 255, 3, 255 ])); }); it('rgba2rgb', function() { assert.deepEqual(ColorTransform.rgba2rgb(new Buffer([ 250, 100, 4, 255 ])), new Buffer([ 250, 100, 4 ])); assert.deepEqual(ColorTransform.rgba2rgb(new Buffer([ 250, 100, 4, 128 ])), new Buffer([ 252, 177, 129 ])); assert.deepEqual(ColorTransform.rgba2rgb(new Buffer([ 250, 100, 4, 255, 1 ])), new Buffer([ 250, 100, 4 ])); assert.deepEqual(ColorTransform.rgba2rgb(new Buffer([ 250, 100, 4, 128, 1 ])), new Buffer([ 252, 177, 129 ])); assert.deepEqual(ColorTransform.rgba2rgb(new Buffer([ 250, 100, 4, 128, 1, 4, 2, 255 ])), new Buffer([ 252, 177, 129, 1, 4, 2 ])); }); it('rgba2gray', function() { assert.deepEqual(ColorTransform.rgba2gray(new Buffer([ 250, 100, 4, 255 ])), new Buffer([ 124 ])); assert.deepEqual(ColorTransform.rgba2gray(new Buffer([ 250, 100, 4, 128 ])), new Buffer([ 189 ])); assert.deepEqual(ColorTransform.rgba2gray(new Buffer([ 250, 100, 4, 255, 1 ])), new Buffer([ 124 ])); assert.deepEqual(ColorTransform.rgba2gray(new Buffer([ 250, 100, 4, 128, 1 ])), new Buffer([ 189 ])); assert.deepEqual(ColorTransform.rgba2gray(new Buffer([ 250, 100, 4, 128, 1, 4, 2, 255 ])), new Buffer([ 189, 3 ])); }); it('rgba2graya', function() { assert.deepEqual(ColorTransform.rgba2graya(new Buffer([ 250, 100, 4, 255 ])), new Buffer([ 124, 255 ])); assert.deepEqual(ColorTransform.rgba2graya(new Buffer([ 250, 100, 4, 128 ])), new Buffer([ 124, 128 ])); assert.deepEqual(ColorTransform.rgba2graya(new Buffer([ 250, 100, 4, 255, 1 ])), new Buffer([ 124, 255 ])); assert.deepEqual(ColorTransform.rgba2graya(new Buffer([ 250, 100, 4, 128, 1 ])), new Buffer([ 124, 128 ])); assert.deepEqual(ColorTransform.rgba2graya(new Buffer([ 250, 100, 4, 128, 1, 4, 2, 255 ])), new Buffer([ 124, 128, 3, 255 ])); }); it('gray2rgb', function() { assert.deepEqual(ColorTransform.gray2rgb(new Buffer([ 124 ])), new Buffer([ 124, 124, 124 ])); assert.deepEqual(ColorTransform.gray2rgb(new Buffer([ 124, 3 ])), new Buffer([ 124, 124, 124, 3, 3, 3 ])); }); it('gray2rgba', function() { assert.deepEqual(ColorTransform.gray2rgba(new Buffer([ 124 ])), new Buffer([ 124, 124, 124, 255 ])); assert.deepEqual(ColorTransform.gray2rgba(new Buffer([ 124, 3 ])), new Buffer([ 124, 124, 124, 255, 3, 3, 3, 255 ])); }); it('gray2graya', function() { assert.deepEqual(ColorTransform.gray2graya(new Buffer([ 124 ])), new Buffer([ 124, 255 ])); assert.deepEqual(ColorTransform.gray2graya(new Buffer([ 124, 3 ])), new Buffer([ 124, 255, 3, 255 ])); }); it('graya2rgb', function() { assert.deepEqual(ColorTransform.graya2rgb(new Buffer([ 124, 255 ])), new Buffer([ 124, 124, 124 ])); assert.deepEqual(ColorTransform.graya2rgb(new Buffer([ 124, 128 ])), new Buffer([ 189, 189, 189 ])); }); it('graya2rgba', function() { assert.deepEqual(ColorTransform.graya2rgba(new Buffer([ 124, 255 ])), new Buffer([ 124, 124, 124, 255 ])); assert.deepEqual(ColorTransform.graya2rgba(new Buffer([ 124, 128 ])), new Buffer([ 124, 124, 124, 128 ])); assert.deepEqual(ColorTransform.graya2rgba(new Buffer([ 124, 255, 3, 128 ])), new Buffer([ 124, 124, 124, 255, 3, 3, 3, 128 ])); }); it('graya2gray', function() { assert.deepEqual(ColorTransform.graya2gray(new Buffer([ 124, 255 ])), new Buffer([ 124 ])); assert.deepEqual(ColorTransform.graya2gray(new Buffer([ 124, 128 ])), new Buffer([ 189 ])); assert.deepEqual(ColorTransform.graya2gray(new Buffer([ 124, 255, 3, 128 ])), new Buffer([ 124, 128 ])); }); it('cmyk2rgb', function() { assert.deepEqual(ColorTransform.cmyk2rgb(new Buffer([ 255, 255, 255, 255 ])), new Buffer([ 255, 255, 255 ])); assert.deepEqual(ColorTransform.cmyk2rgb(new Buffer([ 0, 56, 128, 32 ])), new Buffer([ 1, 13, 20 ])); assert.deepEqual(ColorTransform.cmyk2rgb(new Buffer([ 0, 56, 128, 32, 1 ])), new Buffer([ 1, 13, 20 ])); assert.deepEqual(ColorTransform.cmyk2rgb(new Buffer([ 255, 255, 255, 255, 0, 56, 128, 32 ])), new Buffer([ 255, 255, 255, 1, 13, 20 ])) }); it('cmyk2rgba', function() { assert.deepEqual(ColorTransform.cmyk2rgba(new Buffer([ 255, 255, 255, 255 ])), new Buffer([ 255, 255, 255, 255 ])); assert.deepEqual(ColorTransform.cmyk2rgba(new Buffer([ 0, 56, 128, 32 ])), new Buffer([ 1, 13, 20, 255 ])); assert.deepEqual(ColorTransform.cmyk2rgba(new Buffer([ 0, 56, 128, 32, 1 ])), new Buffer([ 1, 13, 20, 255 ])); assert.deepEqual(ColorTransform.cmyk2rgba(new Buffer([ 255, 255, 255, 255, 0, 56, 128, 32 ])), new Buffer([ 255, 255, 255, 255, 1, 13, 20, 255 ])) }); it('cmyk2gray', function() { assert.deepEqual(ColorTransform.cmyk2gray(new Buffer([ 255, 255, 255, 255 ])), new Buffer([ 254 ])); assert.deepEqual(ColorTransform.cmyk2gray(new Buffer([ 0, 56, 128, 32 ])), new Buffer([ 10 ])); assert.deepEqual(ColorTransform.cmyk2gray(new Buffer([ 0, 56, 128, 32, 1 ])), new Buffer([ 10 ])); assert.deepEqual(ColorTransform.cmyk2gray(new Buffer([ 255, 255, 255, 255, 0, 56, 128, 32 ])), new Buffer([ 254, 10 ])) }); it('cmyk2graya', function() { assert.deepEqual(ColorTransform.cmyk2graya(new Buffer([ 255, 255, 255, 255 ])), new Buffer([ 254, 255 ])); assert.deepEqual(ColorTransform.cmyk2graya(new Buffer([ 0, 56, 128, 32 ])), new Buffer([ 10, 255 ])); assert.deepEqual(ColorTransform.cmyk2graya(new Buffer([ 0, 56, 128, 32, 1 ])), new Buffer([ 10, 255 ])); assert.deepEqual(ColorTransform.cmyk2graya(new Buffer([ 255, 255, 255, 255, 0, 56, 128, 32 ])), new Buffer([ 254, 255, 10, 255 ])) }); }); describe('stream', function() { it('throws an error if transform function doesn\'t exist', function() { var s = new ColorTransform('rgba', 'unknown'); s.on('error', function(err) { assert(err instanceof Error); assert(/Unsupported color conversion/.test(err.message)); }); s.end(new Buffer([ 250, 100, 4, 255, 0, 222, 3, 255 ])); }); it('converts data', function(done) { var s = new ColorTransform('rgba', 'rgb'); var c = 0; s.on('data', function(data) { assert.deepEqual(data, new Buffer([ 250, 100, 4, 0, 222, 3 ])); if (++c === 2) done(); }); s.write(new Buffer([ 250, 100, 4, 255, 0, 222, 3, 255 ])); s.write(new Buffer([ 250, 100, 4, 255, 0, 222, 3, 255 ])); s.end(); }); it('uses passthrough if converting to the same color space', function(done) { var s = new ColorTransform('rgba', 'rgba'); var c = 0; s.on('data', function(data) { assert.deepEqual(data, new Buffer([ 250, 100, 4, 255, 0, 222, 3, 255 ])); if (++c === 2) done(); }); s.write(new Buffer([ 250, 100, 4, 255, 0, 222, 3, 255 ])); s.write(new Buffer([ 250, 100, 4, 255, 0, 222, 3, 255 ])); s.end(); }); it('handles buffers smaller than a single pixel', function(done) { var s = new ColorTransform('rgba', 'rgb'); s.on('data', function(data) { assert.deepEqual(data, new Buffer([ 250, 100, 4 ])); done(); }); s.write(new Buffer([ 250 ])); s.write(new Buffer([ 100 ])); s.write(new Buffer([ 4 ])); s.write(new Buffer([ 255 ])); s.end(); }); it('handles buffers that are not even pixel lengths', function(done) { var s = new ColorTransform('rgba', 'rgb'); s.once('data', function(data) { assert.deepEqual(data, new Buffer([ 250, 100, 4 ])); }); s.write(new Buffer([ 250, 100, 4, 255, 0, 222 ])); s.once('data', function(data) { assert.deepEqual(data, new Buffer([ 0, 222, 3 ])); done(); }); s.write(new Buffer([ 3, 255 ])); s.end(); }); it('supports constructor with a single argument for piping', function(done) { var p = new PassThrough; var s = new ColorTransform('rgb'); p.pipe(s); p.emit('format', { width: 100, height: 100, colorSpace: 'rgba' }); s.on('data', function(data) { assert.deepEqual(data, new Buffer([ 250, 100, 4, 0, 222, 3 ])); done(); }); p.end(new Buffer([ 250, 100, 4, 255, 0, 222, 3, 255 ])); }); }); });