mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Available as normalize() or normalise(). Normalization takes place in LAB place and thus should not change any colors. Existing alpha channels are preserved untouched by normalization.
137 lines
4.2 KiB
JavaScript
Executable File
137 lines
4.2 KiB
JavaScript
Executable File
'use strict';
|
|
|
|
var assert = require('assert');
|
|
|
|
var sharp = require('../../index');
|
|
var fixtures = require('../fixtures');
|
|
|
|
sharp.cache(0);
|
|
|
|
describe('Normalization', function () {
|
|
|
|
it('uses the same prototype for both spellings', function () {
|
|
assert.strictEqual(sharp.prototype.normalize, sharp.prototype.normalise);
|
|
});
|
|
|
|
it('spreads rgb image values between 0 and 255', function(done) {
|
|
sharp(fixtures.inputJpgWithLowContrast)
|
|
.normalize()
|
|
.raw()
|
|
.toBuffer(function (err, data, info) {
|
|
if (err) throw err;
|
|
var min = 255, max = 0, i;
|
|
for (i = 0; i < data.length; i += 3) {
|
|
min = Math.min(min, data[i], data[i + 1], data[i + 2]);
|
|
max = Math.max(max, data[i], data[i + 1], data[i + 2]);
|
|
}
|
|
assert.strictEqual(0, min);
|
|
assert.strictEqual(255, max);
|
|
return done();
|
|
});
|
|
});
|
|
|
|
it('spreads grayscaled image values between 0 and 255', function(done) {
|
|
sharp(fixtures.inputJpgWithLowContrast)
|
|
.gamma()
|
|
.greyscale()
|
|
.normalize()
|
|
.raw()
|
|
.toBuffer(function (err, data, info) {
|
|
if (err) throw err;
|
|
var min = 255, max = 0, i;
|
|
for (i = 0; i < data.length; i++) {
|
|
min = Math.min(min, data[i]);
|
|
max = Math.max(max, data[i]);
|
|
}
|
|
assert.strictEqual(0, min);
|
|
assert.strictEqual(255, max);
|
|
return done();
|
|
});
|
|
});
|
|
|
|
it('stretches greyscale images with alpha channel', function (done) {
|
|
sharp(fixtures.inputPngWithGreyAlpha)
|
|
.normalize()
|
|
.raw()
|
|
.toBuffer(function (err, data, info) {
|
|
// raw toBuffer does not return the alpha channel (yet?)
|
|
var min = 255, max = 0, i;
|
|
for (i = 0; i < data.length; i++) {
|
|
min = Math.min(min, data[i]);
|
|
max = Math.max(max, data[i]);
|
|
}
|
|
assert.strictEqual(0, min);
|
|
assert.strictEqual(255, max);
|
|
return done();
|
|
});
|
|
});
|
|
|
|
it('keeps an existing alpha channel', function (done) {
|
|
sharp(fixtures.inputPngWithTransparency)
|
|
.normalize()
|
|
.toBuffer(function (err, data, info) {
|
|
sharp(data)
|
|
.metadata()
|
|
.then(function (metadata) {
|
|
assert.strictEqual(4, metadata.channels);
|
|
assert.strictEqual(true, metadata.hasAlpha);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
})
|
|
.finally(done);
|
|
});
|
|
});
|
|
|
|
it('keeps the alpha channel of greyscale images intact', function (done) {
|
|
sharp(fixtures.inputPngWithGreyAlpha)
|
|
.normalize()
|
|
.toBuffer(function (err, data, info) {
|
|
sharp(data)
|
|
.metadata()
|
|
.then(function (metadata) {
|
|
assert.strictEqual(true, metadata.hasAlpha);
|
|
// because of complications with greyscale
|
|
// we return everything in srgb for now.
|
|
//
|
|
// assert.strictEqual(2, metadata.channels);
|
|
// assert.strictEqual('b-w', metadata.space);
|
|
assert.strictEqual(4, metadata.channels);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
})
|
|
.finally(done);
|
|
});
|
|
});
|
|
|
|
it('returns a black image for images with only one color', function (done) {
|
|
sharp(fixtures.inputPngWithOneColor)
|
|
.normalize()
|
|
.toBuffer()
|
|
.bind({})
|
|
.then(function (imageData) {
|
|
this.imageData = imageData;
|
|
return sharp(imageData)
|
|
.metadata();
|
|
})
|
|
.then(function (metadata) {
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
// because of complications with greyscale
|
|
// we return everything in srgb for now.
|
|
//
|
|
// assert.strictEqual(1, metadata.channels);
|
|
// assert.strictEqual('b-w', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
})
|
|
.then(function () {
|
|
return sharp(this.imageData)
|
|
.raw()
|
|
.toBuffer();
|
|
})
|
|
.then(function (rawData) {
|
|
// var blackBuffer = new Buffer([0,0,0,0]);
|
|
var blackBuffer = new Buffer([0,0,0, 0,0,0, 0,0,0, 0,0,0]);
|
|
assert.strictEqual(blackBuffer.toString(), rawData.toString());
|
|
})
|
|
.finally(done);
|
|
});
|
|
});
|