From 83cdb558f63c080ceaa9219351ccd6b968b54ee2 Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Mon, 18 Mar 2019 20:15:18 +0000 Subject: [PATCH] Allow Stream-based input of raw pixel data #1579 --- docs/changelog.md | 3 +++ lib/input.js | 4 ++++ test/unit/raw.js | 25 +++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index c4363339..4c1cf2a5 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -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) diff --git a/lib/input.js b/lib/input.js index 4e1a48bd..7a7e2982 100644 --- a/lib/input.js +++ b/lib/input.js @@ -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 = []; diff --git a/test/unit/raw.js b/test/unit/raw.js index e4c64f48..a9e82def 100644 --- a/test/unit/raw.js +++ b/test/unit/raw.js @@ -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 () {