Skip to content

Commit

Permalink
Ensure extractChannel works with 16-bit images #1330
Browse files Browse the repository at this point in the history
  • Loading branch information
lovell committed Aug 12, 2018
1 parent 23a4bc1 commit d705cff
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 1 deletion.
3 changes: 3 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ Requires libvips v8.6.1.
* Improve install time error messages for FreeBSD users.
[#1310](https://github.com/lovell/sharp/issues/1310)

* Ensure extractChannel works with 16-bit images.
[#1330](https://github.com/lovell/sharp/issues/1330)

* Add experimental entropy field to stats response.

#### v0.20.5 - 27<sup>th</sup> June 2018
Expand Down
5 changes: 4 additions & 1 deletion src/pipeline.cc
Original file line number Diff line number Diff line change
Expand Up @@ -694,9 +694,12 @@ class PipelineWorker : public Nan::AsyncWorker {
(baton->err).append("Cannot extract channel from image. Too few channels in image.");
return Error();
}
VipsInterpretation const interpretation = sharp::Is16Bit(image.interpretation())
? VIPS_INTERPRETATION_GREY16
: VIPS_INTERPRETATION_B_W;
image = image
.extract_band(baton->extractChannel)
.copy(VImage::option()->set("interpretation", VIPS_INTERPRETATION_B_W));
.copy(VImage::option()->set("interpretation", interpretation));
}

// Remove alpha channel, if any
Expand Down
Binary file added test/fixtures/expected/extract-alpha-16bit.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions test/unit/extractChannel.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,17 @@ describe('Image channel extraction', function () {
});
});

it('Alpha from 16-bit PNG', function (done) {
const output = fixtures.path('output.extract-alpha-16bit.jpg');
sharp(fixtures.inputPngWithTransparency16bit)
.extractChannel(3)
.toFile(output, function (err, info) {
if (err) throw err;
fixtures.assertMaxColourDistance(output, fixtures.expected('extract-alpha-16bit.jpg'));
done();
});
});

it('Invalid channel number', function () {
assert.throws(function () {
sharp(fixtures.inputJpg)
Expand Down

0 comments on commit d705cff

Please sign in to comment.