Allow Stream-based input of raw pixel data #1579

This commit is contained in:
Lovell Fuller 2019-03-18 20:15:18 +00:00
parent 9ee377963e
commit 83cdb558f6
3 changed files with 32 additions and 0 deletions

View File

@ -15,6 +15,9 @@ Requires libvips v8.7.4.
* Add support for `pages` input option for multi-page input.
[#1566](https://github.com/lovell/sharp/issues/1566)
* Allow Stream-based input of raw pixel data.
[#1579](https://github.com/lovell/sharp/issues/1579)
* Add support for `page` input option to GIF and PDF.
[#1595](https://github.com/lovell/sharp/pull/1595)
[@ramiel](https://github.com/ramiel)

View File

@ -19,6 +19,10 @@ function _createInputDescriptor (input, inputOptions, containerOptions) {
} else if (is.plainObject(input) && !is.defined(inputOptions)) {
// Plain Object descriptor, e.g. create
inputOptions = input;
if (is.plainObject(inputOptions.raw)) {
// Raw Stream
inputDescriptor.buffer = [];
}
} else if (!is.defined(input) && is.object(containerOptions) && containerOptions.allowStream) {
// Stream
inputDescriptor.buffer = [];

View File

@ -92,6 +92,31 @@ describe('Raw pixel data', function () {
});
});
});
it('JPEG to raw Stream and back again', function (done) {
const width = 32;
const height = 24;
const writable = sharp({
raw: {
width,
height,
channels: 3
}
});
writable
.jpeg()
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual('jpeg', info.format);
assert.strictEqual(32, info.width);
assert.strictEqual(24, info.height);
done();
});
sharp(fixtures.inputJpg)
.resize(width, height)
.raw()
.pipe(writable);
});
});
describe('Ouput raw, uncompressed image data', function () {