@revizly/sharp 0.33.2-revizly9 → 0.33.3-revizly4
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/colour.js +1 -1
- package/lib/constructor.js +8 -4
- package/lib/index.d.ts +6 -2
- package/lib/input.js +2 -2
- package/lib/output.js +13 -0
- package/package.json +12 -14
- package/src/common.h +2 -2
- package/src/pipeline.cc +15 -13
- package/src/pipeline.h +4 -2
package/lib/colour.js
CHANGED
@@ -90,7 +90,7 @@ function pipelineColourspace (colourspace) {
|
|
90
90
|
if (!is.string(colourspace)) {
|
91
91
|
throw is.invalidParameterError('colourspace', 'string', colourspace);
|
92
92
|
}
|
93
|
-
this.options.
|
93
|
+
this.options.colourspacePipeline = colourspace;
|
94
94
|
return this;
|
95
95
|
}
|
96
96
|
|
package/lib/constructor.js
CHANGED
@@ -166,7 +166,7 @@ const debuglog = util.debuglog('sharp');
|
|
166
166
|
* @param {number} [options.text.dpi=72] - the resolution (size) at which to render the text. Does not take effect if `height` is specified.
|
167
167
|
* @param {boolean} [options.text.rgba=false] - set this to true to enable RGBA output. This is useful for colour emoji rendering, or support for pango markup features like `<span foreground="red">Red!</span>`.
|
168
168
|
* @param {number} [options.text.spacing=0] - text line height in points. Will use the font line height if none is specified.
|
169
|
-
* @param {string} [options.text.wrap='word'] - word wrapping style when width is provided, one of: 'word', 'char', '
|
169
|
+
* @param {string} [options.text.wrap='word'] - word wrapping style when width is provided, one of: 'word', 'char', 'word-char' (prefer word, fallback to char) or 'none'.
|
170
170
|
* @returns {Sharp}
|
171
171
|
* @throws {Error} Invalid parameters
|
172
172
|
*/
|
@@ -257,7 +257,7 @@ const Sharp = function (input, options) {
|
|
257
257
|
removeAlpha: false,
|
258
258
|
ensureAlpha: -1,
|
259
259
|
colourspace: 'srgb',
|
260
|
-
|
260
|
+
colourspacePipeline: 'last',
|
261
261
|
composite: [],
|
262
262
|
// output
|
263
263
|
fileOut: '',
|
@@ -325,6 +325,7 @@ const Sharp = function (input, options) {
|
|
325
325
|
heifCompression: 'av1',
|
326
326
|
heifEffort: 4,
|
327
327
|
heifChromaSubsampling: '4:4:4',
|
328
|
+
heifBitdepth: 8,
|
328
329
|
jxlDistance: 1,
|
329
330
|
jxlDecodingTier: 0,
|
330
331
|
jxlEffort: 7,
|
@@ -425,13 +426,16 @@ Object.setPrototypeOf(Sharp, stream.Duplex);
|
|
425
426
|
function clone () {
|
426
427
|
// Clone existing options
|
427
428
|
const clone = this.constructor.call();
|
428
|
-
|
429
|
+
const { debuglog, queueListener, ...options } = this.options;
|
430
|
+
clone.options = structuredClone(options);
|
431
|
+
clone.options.debuglog = debuglog;
|
432
|
+
clone.options.queueListener = queueListener;
|
429
433
|
// Pass 'finish' event to clone for Stream-based input
|
430
434
|
if (this._isStreamInput()) {
|
431
435
|
this.on('finish', () => {
|
432
436
|
// Clone inherits input data
|
433
437
|
this._flattenBufferIn();
|
434
|
-
clone.options.
|
438
|
+
clone.options.input.buffer = this.options.input.buffer;
|
435
439
|
clone.emit('finish');
|
436
440
|
});
|
437
441
|
}
|
package/lib/index.d.ts
CHANGED
@@ -1017,7 +1017,7 @@ declare namespace sharp {
|
|
1017
1017
|
rgba?: boolean;
|
1018
1018
|
/** Text line height in points. Will use the font line height if none is specified. (optional, default `0`) */
|
1019
1019
|
spacing?: number;
|
1020
|
-
/** Word wrapping style when width is provided, one of: 'word', 'char', '
|
1020
|
+
/** Word wrapping style when width is provided, one of: 'word', 'char', 'word-char' (prefer word, fallback to char) or 'none' */
|
1021
1021
|
wrap?: TextWrap;
|
1022
1022
|
}
|
1023
1023
|
|
@@ -1244,6 +1244,8 @@ declare namespace sharp {
|
|
1244
1244
|
effort?: number | undefined;
|
1245
1245
|
/** set to '4:2:0' to use chroma subsampling, requires libvips v8.11.0 (optional, default '4:4:4') */
|
1246
1246
|
chromaSubsampling?: string | undefined;
|
1247
|
+
/** Set bitdepth to 8, 10 or 12 bit (optional, default 8) */
|
1248
|
+
bitdepth?: 8 | 10 | 12 | undefined;
|
1247
1249
|
}
|
1248
1250
|
|
1249
1251
|
interface HeifOptions extends OutputOptions {
|
@@ -1257,6 +1259,8 @@ declare namespace sharp {
|
|
1257
1259
|
effort?: number | undefined;
|
1258
1260
|
/** set to '4:2:0' to use chroma subsampling (optional, default '4:4:4') */
|
1259
1261
|
chromaSubsampling?: string | undefined;
|
1262
|
+
/** Set bitdepth to 8, 10 or 12 bit (optional, default 8) */
|
1263
|
+
bitdepth?: 8 | 10 | 12 | undefined;
|
1260
1264
|
}
|
1261
1265
|
|
1262
1266
|
interface GifOptions extends OutputOptions, AnimationOptions {
|
@@ -1613,7 +1617,7 @@ declare namespace sharp {
|
|
1613
1617
|
|
1614
1618
|
type TextAlign = 'left' | 'centre' | 'center' | 'right';
|
1615
1619
|
|
1616
|
-
type TextWrap = 'word' | 'char' | '
|
1620
|
+
type TextWrap = 'word' | 'char' | 'word-char' | 'none';
|
1617
1621
|
|
1618
1622
|
type TileContainer = 'fs' | 'zip';
|
1619
1623
|
|
package/lib/input.js
CHANGED
@@ -345,10 +345,10 @@ function _createInputDescriptor (input, inputOptions, containerOptions) {
|
|
345
345
|
}
|
346
346
|
}
|
347
347
|
if (is.defined(inputOptions.text.wrap)) {
|
348
|
-
if (is.string(inputOptions.text.wrap) && is.inArray(inputOptions.text.wrap, ['word', 'char', '
|
348
|
+
if (is.string(inputOptions.text.wrap) && is.inArray(inputOptions.text.wrap, ['word', 'char', 'word-char', 'none'])) {
|
349
349
|
inputDescriptor.textWrap = inputOptions.text.wrap;
|
350
350
|
} else {
|
351
|
-
throw is.invalidParameterError('text.wrap', 'one of: word, char,
|
351
|
+
throw is.invalidParameterError('text.wrap', 'one of: word, char, word-char, none', inputOptions.text.wrap);
|
352
352
|
}
|
353
353
|
}
|
354
354
|
delete inputDescriptor.buffer;
|
package/lib/output.js
CHANGED
@@ -1011,6 +1011,7 @@ function tiff (options) {
|
|
1011
1011
|
* Use these AVIF options for output image.
|
1012
1012
|
*
|
1013
1013
|
* AVIF image sequences are not supported.
|
1014
|
+
* Prebuilt binaries support a bitdepth of 8 only.
|
1014
1015
|
*
|
1015
1016
|
* @example
|
1016
1017
|
* const data = await sharp(input)
|
@@ -1029,6 +1030,7 @@ function tiff (options) {
|
|
1029
1030
|
* @param {boolean} [options.lossless=false] - use lossless compression
|
1030
1031
|
* @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 9 (slowest)
|
1031
1032
|
* @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling
|
1033
|
+
* @param {number} [options.bitdepth=8] - set bitdepth to 8, 10 or 12 bit
|
1032
1034
|
* @returns {Sharp}
|
1033
1035
|
* @throws {Error} Invalid options
|
1034
1036
|
*/
|
@@ -1055,6 +1057,7 @@ function avif (options) {
|
|
1055
1057
|
* @param {boolean} [options.lossless=false] - use lossless compression
|
1056
1058
|
* @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 9 (slowest)
|
1057
1059
|
* @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling
|
1060
|
+
* @param {number} [options.bitdepth=8] - set bitdepth to 8, 10 or 12 bit
|
1058
1061
|
* @returns {Sharp}
|
1059
1062
|
* @throws {Error} Invalid options
|
1060
1063
|
*/
|
@@ -1093,6 +1096,16 @@ function heif (options) {
|
|
1093
1096
|
throw is.invalidParameterError('chromaSubsampling', 'one of: 4:2:0, 4:4:4', options.chromaSubsampling);
|
1094
1097
|
}
|
1095
1098
|
}
|
1099
|
+
if (is.defined(options.bitdepth)) {
|
1100
|
+
if (is.integer(options.bitdepth) && is.inArray(options.bitdepth, [8, 10, 12])) {
|
1101
|
+
if (options.bitdepth !== 8 && this.constructor.versions.heif) {
|
1102
|
+
throw is.invalidParameterError('bitdepth when using prebuilt binaries', 8, options.bitdepth);
|
1103
|
+
}
|
1104
|
+
this.options.heifBitdepth = options.bitdepth;
|
1105
|
+
} else {
|
1106
|
+
throw is.invalidParameterError('bitdepth', '8, 10 or 12', options.bitdepth);
|
1107
|
+
}
|
1108
|
+
}
|
1096
1109
|
} else {
|
1097
1110
|
throw is.invalidParameterError('options', 'Object', options);
|
1098
1111
|
}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@revizly/sharp",
|
3
3
|
"description": "High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, GIF, AVIF and TIFF images",
|
4
|
-
"version": "0.33.
|
4
|
+
"version": "0.33.3-revizly4",
|
5
5
|
"author": "Lovell Fuller <npm@lovell.info>",
|
6
6
|
"homepage": "https://sharp.pixelplumbing.com",
|
7
7
|
"contributors": [
|
@@ -137,41 +137,39 @@
|
|
137
137
|
],
|
138
138
|
"dependencies": {
|
139
139
|
"color": "^4.2.3",
|
140
|
-
"detect-libc": "^2.0.
|
140
|
+
"detect-libc": "^2.0.3",
|
141
141
|
"semver": "^7.6.0"
|
142
142
|
},
|
143
143
|
"optionalDependencies": {
|
144
|
-
"@revizly/sharp-libvips-linux-arm64": "1.0.
|
145
|
-
"@revizly/sharp-libvips-linux-x64": "1.0.
|
146
|
-
"@revizly/sharp-linux-arm64": "0.33.2-
|
147
|
-
"@revizly/sharp-linux-x64": "0.33.2-
|
144
|
+
"@revizly/sharp-libvips-linux-arm64": "1.0.3",
|
145
|
+
"@revizly/sharp-libvips-linux-x64": "1.0.3",
|
146
|
+
"@revizly/sharp-linux-arm64": "0.33.2-revizly8",
|
147
|
+
"@revizly/sharp-linux-x64": "0.33.2-revizly8"
|
148
148
|
},
|
149
149
|
"devDependencies": {
|
150
|
-
"@emnapi/runtime": "^1.
|
151
|
-
"@revizly/sharp-libvips-dev": "1.0.
|
152
|
-
"@revizly/sharp-libvips-win32-ia32": "1.0.1",
|
153
|
-
"@revizly/sharp-libvips-win32-x64": "1.0.1",
|
150
|
+
"@emnapi/runtime": "^1.1.0",
|
151
|
+
"@revizly/sharp-libvips-dev": "1.0.3",
|
154
152
|
"@types/node": "*",
|
155
153
|
"async": "^3.2.5",
|
156
154
|
"cc": "^3.0.1",
|
157
|
-
"emnapi": "^1.
|
155
|
+
"emnapi": "^1.1.0",
|
158
156
|
"exif-reader": "^2.0.1",
|
159
157
|
"extract-zip": "^2.0.1",
|
160
158
|
"icc": "^3.0.0",
|
161
159
|
"jsdoc-to-markdown": "^8.0.1",
|
162
160
|
"license-checker": "^25.0.1",
|
163
161
|
"mocha": "^10.3.0",
|
164
|
-
"node-addon-api": "^
|
162
|
+
"node-addon-api": "^8.0.0",
|
165
163
|
"nyc": "^15.1.0",
|
166
164
|
"prebuild": "^13.0.0",
|
167
165
|
"semistandard": "^17.0.0",
|
168
166
|
"tar-fs": "^3.0.5",
|
169
|
-
"tsd": "^0.30.
|
167
|
+
"tsd": "^0.30.7"
|
170
168
|
},
|
171
169
|
"license": "Apache-2.0",
|
172
170
|
"engines": {
|
173
171
|
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
174
|
-
"libvips": ">=8.15.
|
172
|
+
"libvips": ">=8.15.2"
|
175
173
|
},
|
176
174
|
"funding": {
|
177
175
|
"url": "https://opencollective.com/libvips"
|
package/src/common.h
CHANGED
@@ -16,8 +16,8 @@
|
|
16
16
|
|
17
17
|
#if (VIPS_MAJOR_VERSION < 8) || \
|
18
18
|
(VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION < 15) || \
|
19
|
-
(VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION == 15 && VIPS_MICRO_VERSION <
|
20
|
-
#error "libvips version 8.15.
|
19
|
+
(VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION == 15 && VIPS_MICRO_VERSION < 2)
|
20
|
+
#error "libvips version 8.15.2+ is required - please see https://sharp.pixelplumbing.com/install"
|
21
21
|
#endif
|
22
22
|
|
23
23
|
#if ((!defined(__clang__)) && defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)))
|
package/src/pipeline.cc
CHANGED
@@ -54,7 +54,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
54
54
|
sharp::ImageType inputImageType;
|
55
55
|
std::tie(image, inputImageType) = sharp::OpenInput(baton->input);
|
56
56
|
VipsAccess access = baton->input->access;
|
57
|
-
image = sharp::EnsureColourspace(image, baton->
|
57
|
+
image = sharp::EnsureColourspace(image, baton->colourspacePipeline);
|
58
58
|
|
59
59
|
int nPages = baton->input->pages;
|
60
60
|
if (nPages == -1) {
|
@@ -189,7 +189,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
189
189
|
// - input colourspace is not specified;
|
190
190
|
bool const shouldPreShrink = (targetResizeWidth > 0 || targetResizeHeight > 0) &&
|
191
191
|
baton->gamma == 0 && baton->topOffsetPre == -1 && baton->trimThreshold < 0.0 &&
|
192
|
-
baton->
|
192
|
+
baton->colourspacePipeline == VIPS_INTERPRETATION_LAST && !shouldRotateBefore;
|
193
193
|
|
194
194
|
if (shouldPreShrink) {
|
195
195
|
// The common part of the shrink: the bit by which both axes must be shrunk
|
@@ -331,6 +331,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
331
331
|
sharp::HasProfile(image) &&
|
332
332
|
image.interpretation() != VIPS_INTERPRETATION_LABS &&
|
333
333
|
image.interpretation() != VIPS_INTERPRETATION_GREY16 &&
|
334
|
+
baton->colourspacePipeline != VIPS_INTERPRETATION_CMYK &&
|
334
335
|
!baton->input->ignoreIcc
|
335
336
|
) {
|
336
337
|
// Convert to sRGB/P3 using embedded profile
|
@@ -344,7 +345,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
344
345
|
}
|
345
346
|
} else if (
|
346
347
|
image.interpretation() == VIPS_INTERPRETATION_CMYK &&
|
347
|
-
baton->
|
348
|
+
baton->colourspacePipeline != VIPS_INTERPRETATION_CMYK
|
348
349
|
) {
|
349
350
|
image = image.icc_transform(processingProfile, VImage::option()
|
350
351
|
->set("input_profile", "cmyk")
|
@@ -432,7 +433,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
432
433
|
for (unsigned int i = 0; i < baton->joinChannelIn.size(); i++) {
|
433
434
|
baton->joinChannelIn[i]->access = access;
|
434
435
|
std::tie(joinImage, joinImageType) = sharp::OpenInput(baton->joinChannelIn[i]);
|
435
|
-
joinImage = sharp::EnsureColourspace(joinImage, baton->
|
436
|
+
joinImage = sharp::EnsureColourspace(joinImage, baton->colourspacePipeline);
|
436
437
|
image = image.bandjoin(joinImage);
|
437
438
|
}
|
438
439
|
image = image.copy(VImage::option()->set("interpretation", baton->colourspace));
|
@@ -642,7 +643,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
642
643
|
sharp::ImageType compositeImageType = sharp::ImageType::UNKNOWN;
|
643
644
|
composite->input->access = access;
|
644
645
|
std::tie(compositeImage, compositeImageType) = sharp::OpenInput(composite->input);
|
645
|
-
compositeImage = sharp::EnsureColourspace(compositeImage, baton->
|
646
|
+
compositeImage = sharp::EnsureColourspace(compositeImage, baton->colourspacePipeline);
|
646
647
|
// Verify within current dimensions
|
647
648
|
if (compositeImage.width() > image.width() || compositeImage.height() > image.height()) {
|
648
649
|
throw vips::VError("Image to composite must have same dimensions or smaller");
|
@@ -743,7 +744,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
743
744
|
sharp::ImageType booleanImageType = sharp::ImageType::UNKNOWN;
|
744
745
|
baton->boolean->access = access;
|
745
746
|
std::tie(booleanImage, booleanImageType) = sharp::OpenInput(baton->boolean);
|
746
|
-
booleanImage = sharp::EnsureColourspace(booleanImage, baton->
|
747
|
+
booleanImage = sharp::EnsureColourspace(booleanImage, baton->colourspacePipeline);
|
747
748
|
image = sharp::Boolean(image, booleanImage, baton->booleanOp);
|
748
749
|
image = sharp::RemoveGifPalette(image);
|
749
750
|
}
|
@@ -776,7 +777,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
776
777
|
// Convert colourspace, pass the current known interpretation so libvips doesn't have to guess
|
777
778
|
image = image.colourspace(baton->colourspace, VImage::option()->set("source_space", image.interpretation()));
|
778
779
|
// Transform colours from embedded profile to output profile
|
779
|
-
if ((baton->keepMetadata & VIPS_FOREIGN_KEEP_ICC) && baton->
|
780
|
+
if ((baton->keepMetadata & VIPS_FOREIGN_KEEP_ICC) && baton->colourspacePipeline != VIPS_INTERPRETATION_CMYK &&
|
780
781
|
baton->withIccProfile.empty() && sharp::HasProfile(image)) {
|
781
782
|
image = image.icc_transform(processingProfile, VImage::option()
|
782
783
|
->set("embedded", TRUE)
|
@@ -988,7 +989,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
988
989
|
->set("Q", baton->heifQuality)
|
989
990
|
->set("compression", baton->heifCompression)
|
990
991
|
->set("effort", baton->heifEffort)
|
991
|
-
->set("bitdepth",
|
992
|
+
->set("bitdepth", baton->heifBitdepth)
|
992
993
|
->set("subsample_mode", baton->heifChromaSubsampling == "4:4:4"
|
993
994
|
? VIPS_FOREIGN_SUBSAMPLE_OFF : VIPS_FOREIGN_SUBSAMPLE_ON)
|
994
995
|
->set("lossless", baton->heifLossless)));
|
@@ -1181,7 +1182,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|
1181
1182
|
->set("Q", baton->heifQuality)
|
1182
1183
|
->set("compression", baton->heifCompression)
|
1183
1184
|
->set("effort", baton->heifEffort)
|
1184
|
-
->set("bitdepth",
|
1185
|
+
->set("bitdepth", baton->heifBitdepth)
|
1185
1186
|
->set("subsample_mode", baton->heifChromaSubsampling == "4:4:4"
|
1186
1187
|
? VIPS_FOREIGN_SUBSAMPLE_OFF : VIPS_FOREIGN_SUBSAMPLE_ON)
|
1187
1188
|
->set("lossless", baton->heifLossless));
|
@@ -1607,10 +1608,10 @@ Napi::Value pipeline(const Napi::CallbackInfo& info) {
|
|
1607
1608
|
baton->recombMatrix[i] = sharp::AttrAsDouble(recombMatrix, i);
|
1608
1609
|
}
|
1609
1610
|
}
|
1610
|
-
baton->
|
1611
|
-
options, "
|
1612
|
-
if (baton->
|
1613
|
-
baton->
|
1611
|
+
baton->colourspacePipeline = sharp::AttrAsEnum<VipsInterpretation>(
|
1612
|
+
options, "colourspacePipeline", VIPS_TYPE_INTERPRETATION);
|
1613
|
+
if (baton->colourspacePipeline == VIPS_INTERPRETATION_ERROR) {
|
1614
|
+
baton->colourspacePipeline = VIPS_INTERPRETATION_LAST;
|
1614
1615
|
}
|
1615
1616
|
baton->colourspace = sharp::AttrAsEnum<VipsInterpretation>(options, "colourspace", VIPS_TYPE_INTERPRETATION);
|
1616
1617
|
if (baton->colourspace == VIPS_INTERPRETATION_ERROR) {
|
@@ -1695,6 +1696,7 @@ Napi::Value pipeline(const Napi::CallbackInfo& info) {
|
|
1695
1696
|
options, "heifCompression", VIPS_TYPE_FOREIGN_HEIF_COMPRESSION);
|
1696
1697
|
baton->heifEffort = sharp::AttrAsUint32(options, "heifEffort");
|
1697
1698
|
baton->heifChromaSubsampling = sharp::AttrAsStr(options, "heifChromaSubsampling");
|
1699
|
+
baton->heifBitdepth = sharp::AttrAsUint32(options, "heifBitdepth");
|
1698
1700
|
baton->jxlDistance = sharp::AttrAsDouble(options, "jxlDistance");
|
1699
1701
|
baton->jxlDecodingTier = sharp::AttrAsUint32(options, "jxlDecodingTier");
|
1700
1702
|
baton->jxlEffort = sharp::AttrAsUint32(options, "jxlEffort");
|
package/src/pipeline.h
CHANGED
@@ -181,6 +181,7 @@ struct PipelineBaton {
|
|
181
181
|
int heifEffort;
|
182
182
|
std::string heifChromaSubsampling;
|
183
183
|
bool heifLossless;
|
184
|
+
int heifBitdepth;
|
184
185
|
double jxlDistance;
|
185
186
|
int jxlDecodingTier;
|
186
187
|
int jxlEffort;
|
@@ -205,7 +206,7 @@ struct PipelineBaton {
|
|
205
206
|
int extractChannel;
|
206
207
|
bool removeAlpha;
|
207
208
|
double ensureAlpha;
|
208
|
-
VipsInterpretation
|
209
|
+
VipsInterpretation colourspacePipeline;
|
209
210
|
VipsInterpretation colourspace;
|
210
211
|
std::vector<int> delay;
|
211
212
|
int loop;
|
@@ -349,6 +350,7 @@ struct PipelineBaton {
|
|
349
350
|
heifEffort(4),
|
350
351
|
heifChromaSubsampling("4:4:4"),
|
351
352
|
heifLossless(false),
|
353
|
+
heifBitdepth(8),
|
352
354
|
jxlDistance(1.0),
|
353
355
|
jxlDecodingTier(0),
|
354
356
|
jxlEffort(7),
|
@@ -369,7 +371,7 @@ struct PipelineBaton {
|
|
369
371
|
extractChannel(-1),
|
370
372
|
removeAlpha(false),
|
371
373
|
ensureAlpha(-1.0),
|
372
|
-
|
374
|
+
colourspacePipeline(VIPS_INTERPRETATION_LAST),
|
373
375
|
colourspace(VIPS_INTERPRETATION_LAST),
|
374
376
|
loop(-1),
|
375
377
|
tileSize(256),
|