mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Set PNG bitdepth based on number of colours #2855
Removes use of deprecated libvips API
This commit is contained in:
parent
4e84f743e4
commit
3402656ec5
@ -4,6 +4,11 @@
|
|||||||
|
|
||||||
Requires libvips v8.11.3
|
Requires libvips v8.11.3
|
||||||
|
|
||||||
|
### v0.29.1 - TBD
|
||||||
|
|
||||||
|
* Ensure correct PNG bitdepth is set based on number of colours.
|
||||||
|
[#2855](https://github.com/lovell/sharp/issues/2855)
|
||||||
|
|
||||||
### v0.29.0 - 17th August 2021
|
### v0.29.0 - 17th August 2021
|
||||||
|
|
||||||
* Drop support for Node.js 10, now requires Node.js >= 12.13.0.
|
* Drop support for Node.js 10, now requires Node.js >= 12.13.0.
|
||||||
|
@ -232,7 +232,7 @@ const Sharp = function (input, options) {
|
|||||||
pngAdaptiveFiltering: false,
|
pngAdaptiveFiltering: false,
|
||||||
pngPalette: false,
|
pngPalette: false,
|
||||||
pngQuality: 100,
|
pngQuality: 100,
|
||||||
pngColours: 256,
|
pngBitdepth: 8,
|
||||||
pngDither: 1,
|
pngDither: 1,
|
||||||
webpQuality: 80,
|
webpQuality: 80,
|
||||||
webpAlphaQuality: 100,
|
webpAlphaQuality: 100,
|
||||||
|
@ -405,7 +405,7 @@ function png (options) {
|
|||||||
const colours = options.colours || options.colors;
|
const colours = options.colours || options.colors;
|
||||||
if (is.defined(colours)) {
|
if (is.defined(colours)) {
|
||||||
if (is.integer(colours) && is.inRange(colours, 2, 256)) {
|
if (is.integer(colours) && is.inRange(colours, 2, 256)) {
|
||||||
this.options.pngColours = colours;
|
this.options.pngBitdepth = 1 << 31 - Math.clz32(Math.ceil(Math.log2(colours)));
|
||||||
} else {
|
} else {
|
||||||
throw is.invalidParameterError('colours', 'integer between 2 and 256', colours);
|
throw is.invalidParameterError('colours', 'integer between 2 and 256', colours);
|
||||||
}
|
}
|
||||||
|
@ -799,7 +799,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("colours", baton->pngColours)
|
->set("bitdepth", 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;
|
||||||
@ -955,7 +955,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("colours", baton->pngColours)
|
->set("bitdepth", 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) ||
|
||||||
@ -1429,7 +1429,7 @@ Napi::Value pipeline(const Napi::CallbackInfo& info) {
|
|||||||
baton->pngAdaptiveFiltering = sharp::AttrAsBool(options, "pngAdaptiveFiltering");
|
baton->pngAdaptiveFiltering = sharp::AttrAsBool(options, "pngAdaptiveFiltering");
|
||||||
baton->pngPalette = sharp::AttrAsBool(options, "pngPalette");
|
baton->pngPalette = sharp::AttrAsBool(options, "pngPalette");
|
||||||
baton->pngQuality = sharp::AttrAsUint32(options, "pngQuality");
|
baton->pngQuality = sharp::AttrAsUint32(options, "pngQuality");
|
||||||
baton->pngColours = sharp::AttrAsUint32(options, "pngColours");
|
baton->pngBitdepth = sharp::AttrAsUint32(options, "pngBitdepth");
|
||||||
baton->pngDither = sharp::AttrAsDouble(options, "pngDither");
|
baton->pngDither = sharp::AttrAsDouble(options, "pngDither");
|
||||||
baton->webpQuality = sharp::AttrAsUint32(options, "webpQuality");
|
baton->webpQuality = sharp::AttrAsUint32(options, "webpQuality");
|
||||||
baton->webpAlphaQuality = sharp::AttrAsUint32(options, "webpAlphaQuality");
|
baton->webpAlphaQuality = sharp::AttrAsUint32(options, "webpAlphaQuality");
|
||||||
|
@ -146,7 +146,7 @@ struct PipelineBaton {
|
|||||||
bool pngAdaptiveFiltering;
|
bool pngAdaptiveFiltering;
|
||||||
bool pngPalette;
|
bool pngPalette;
|
||||||
int pngQuality;
|
int pngQuality;
|
||||||
int pngColours;
|
int pngBitdepth;
|
||||||
double pngDither;
|
double pngDither;
|
||||||
int webpQuality;
|
int webpQuality;
|
||||||
int webpAlphaQuality;
|
int webpAlphaQuality;
|
||||||
@ -276,7 +276,7 @@ struct PipelineBaton {
|
|||||||
pngAdaptiveFiltering(false),
|
pngAdaptiveFiltering(false),
|
||||||
pngPalette(false),
|
pngPalette(false),
|
||||||
pngQuality(100),
|
pngQuality(100),
|
||||||
pngColours(256),
|
pngBitdepth(8),
|
||||||
pngDither(1.0),
|
pngDither(1.0),
|
||||||
webpQuality(80),
|
webpQuality(80),
|
||||||
webpAlphaQuality(100),
|
webpAlphaQuality(100),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user