Ensure extractChannel works with 16-bit images #1330

This commit is contained in:
Lovell Fuller 2018-08-12 20:22:39 +01:00
parent 23a4bc103e
commit d705cffdd6
4 changed files with 18 additions and 1 deletions

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

View File

@ -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)