mirror of
https://github.com/lovell/sharp.git
synced 2025-07-10 19:10:14 +02:00
Ensure 16-bit PNG output uses correct bitdepth #2958
This commit is contained in:
parent
2a0077c481
commit
2deced0fb9
@ -824,7 +824,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|||||||
->set("filter", baton->pngAdaptiveFiltering ? VIPS_FOREIGN_PNG_FILTER_ALL : VIPS_FOREIGN_PNG_FILTER_NONE)
|
->set("filter", baton->pngAdaptiveFiltering ? VIPS_FOREIGN_PNG_FILTER_ALL : VIPS_FOREIGN_PNG_FILTER_NONE)
|
||||||
->set("palette", baton->pngPalette)
|
->set("palette", baton->pngPalette)
|
||||||
->set("Q", baton->pngQuality)
|
->set("Q", baton->pngQuality)
|
||||||
->set("bitdepth", baton->pngBitdepth)
|
->set("bitdepth", sharp::Is16Bit(image.interpretation()) ? 16 : baton->pngBitdepth)
|
||||||
->set("dither", baton->pngDither)));
|
->set("dither", baton->pngDither)));
|
||||||
baton->bufferOut = static_cast<char*>(area->data);
|
baton->bufferOut = static_cast<char*>(area->data);
|
||||||
baton->bufferOutLength = area->length;
|
baton->bufferOutLength = area->length;
|
||||||
@ -993,7 +993,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|||||||
->set("filter", baton->pngAdaptiveFiltering ? VIPS_FOREIGN_PNG_FILTER_ALL : VIPS_FOREIGN_PNG_FILTER_NONE)
|
->set("filter", baton->pngAdaptiveFiltering ? VIPS_FOREIGN_PNG_FILTER_ALL : VIPS_FOREIGN_PNG_FILTER_NONE)
|
||||||
->set("palette", baton->pngPalette)
|
->set("palette", baton->pngPalette)
|
||||||
->set("Q", baton->pngQuality)
|
->set("Q", baton->pngQuality)
|
||||||
->set("bitdepth", baton->pngBitdepth)
|
->set("bitdepth", sharp::Is16Bit(image.interpretation()) ? 16 : baton->pngBitdepth)
|
||||||
->set("dither", baton->pngDither));
|
->set("dither", baton->pngDither));
|
||||||
baton->formatOut = "png";
|
baton->formatOut = "png";
|
||||||
} else if (baton->formatOut == "webp" || (mightMatchInput && isWebp) ||
|
} else if (baton->formatOut == "webp" || (mightMatchInput && isWebp) ||
|
||||||
|
@ -112,6 +112,18 @@ describe('PNG', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('16-bit grey+alpha PNG roundtrip', async () => {
|
||||||
|
const after = await sharp(fixtures.inputPng16BitGreyAlpha)
|
||||||
|
.toColourspace('grey16')
|
||||||
|
.toBuffer();
|
||||||
|
|
||||||
|
const [statsBefore, statsAfter] = await Promise.all([
|
||||||
|
sharp(fixtures.inputPng16BitGreyAlpha).stats(),
|
||||||
|
sharp(after).stats()
|
||||||
|
]);
|
||||||
|
assert.deepStrictEqual(statsAfter.channels[1], statsBefore.channels[1]);
|
||||||
|
});
|
||||||
|
|
||||||
it('Valid PNG libimagequant palette value does not throw error', function () {
|
it('Valid PNG libimagequant palette value does not throw error', function () {
|
||||||
assert.doesNotThrow(function () {
|
assert.doesNotThrow(function () {
|
||||||
sharp().png({ palette: false });
|
sharp().png({ palette: false });
|
||||||
|
Loading…
x
Reference in New Issue
Block a user