mirror of
https://github.com/lovell/sharp.git
synced 2026-02-04 05:36:18 +01:00
Add AVIF/HEIF 'tune' option to control quality metrics #4227
This commit is contained in:
@@ -378,6 +378,7 @@ const Sharp = function (input, options) {
|
||||
heifEffort: 4,
|
||||
heifChromaSubsampling: '4:4:4',
|
||||
heifBitdepth: 8,
|
||||
heifTune: 'ssim',
|
||||
jxlDistance: 1,
|
||||
jxlDecodingTier: 0,
|
||||
jxlEffort: 7,
|
||||
|
||||
6
lib/index.d.ts
vendored
6
lib/index.d.ts
vendored
@@ -1167,6 +1167,8 @@ declare namespace sharp {
|
||||
|
||||
type HeifCompression = 'av1' | 'hevc';
|
||||
|
||||
type HeifTune = 'iq' | 'ssim' | 'psnr';
|
||||
|
||||
type Unit = 'inch' | 'cm';
|
||||
|
||||
interface WriteableMetadata {
|
||||
@@ -1414,6 +1416,8 @@ declare namespace sharp {
|
||||
chromaSubsampling?: string | undefined;
|
||||
/** Set bitdepth to 8, 10 or 12 bit (optional, default 8) */
|
||||
bitdepth?: 8 | 10 | 12 | undefined;
|
||||
/** Tune output for a quality metric, one of 'iq', 'ssim' or 'psnr' (optional, default 'iq') */
|
||||
tune?: HeifTune | undefined;
|
||||
}
|
||||
|
||||
interface HeifOptions extends OutputOptions {
|
||||
@@ -1429,6 +1433,8 @@ declare namespace sharp {
|
||||
chromaSubsampling?: string | undefined;
|
||||
/** Set bitdepth to 8, 10 or 12 bit (optional, default 8) */
|
||||
bitdepth?: 8 | 10 | 12 | undefined;
|
||||
/** Tune output for a quality metric, one of 'ssim', 'psnr' or 'iq' (optional, default 'ssim') */
|
||||
tune?: HeifTune | undefined;
|
||||
}
|
||||
|
||||
interface GifOptions extends OutputOptions, AnimationOptions {
|
||||
|
||||
@@ -1175,11 +1175,13 @@ function tiff (options) {
|
||||
* @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 9 (slowest)
|
||||
* @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling
|
||||
* @param {number} [options.bitdepth=8] - set bitdepth to 8, 10 or 12 bit
|
||||
* @param {string} [options.tune='iq'] - tune output for a quality metric, one of 'iq' (default), 'ssim' or 'psnr'
|
||||
* @returns {Sharp}
|
||||
* @throws {Error} Invalid options
|
||||
*/
|
||||
function avif (options) {
|
||||
return this.heif({ ...options, compression: 'av1' });
|
||||
const tune = is.object(options) && is.defined(options.tune) ? options.tune : 'iq';
|
||||
return this.heif({ ...options, compression: 'av1', tune });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1202,6 +1204,7 @@ function avif (options) {
|
||||
* @param {number} [options.effort=4] - CPU effort, between 0 (fastest) and 9 (slowest)
|
||||
* @param {string} [options.chromaSubsampling='4:4:4'] - set to '4:2:0' to use chroma subsampling
|
||||
* @param {number} [options.bitdepth=8] - set bitdepth to 8, 10 or 12 bit
|
||||
* @param {string} [options.tune='ssim'] - tune output for a quality metric, one of 'ssim' (default), 'psnr' or 'iq'
|
||||
* @returns {Sharp}
|
||||
* @throws {Error} Invalid options
|
||||
*/
|
||||
@@ -1250,6 +1253,13 @@ function heif (options) {
|
||||
throw is.invalidParameterError('bitdepth', '8, 10 or 12', options.bitdepth);
|
||||
}
|
||||
}
|
||||
if (is.defined(options.tune)) {
|
||||
if (is.string(options.tune) && is.inArray(options.tune, ['iq', 'ssim', 'psnr'])) {
|
||||
this.options.heifTune = options.tune;
|
||||
} else {
|
||||
throw is.invalidParameterError('tune', 'one of: psnr, ssim, iq', options.tune);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw is.invalidParameterError('options', 'Object', options);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user