From 8561f0da1d66ce905973edd796e8eb23d2a4cd7c Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Sun, 18 Jan 2026 20:24:34 +0000 Subject: [PATCH] Ensure HEIF primary item is used as default page #4487 --- docs/src/content/docs/changelog/v0.35.0.md | 3 + src/common.cc | 24 ++++- src/common.h | 2 +- src/pipeline.cc | 2 +- test/fixtures/index.js | 2 +- test/fixtures/pitm.avif | Bin 0 -> 66801 bytes test/unit/avif.js | 114 +++++++++++++++------ 7 files changed, 111 insertions(+), 36 deletions(-) create mode 100644 test/fixtures/pitm.avif diff --git a/docs/src/content/docs/changelog/v0.35.0.md b/docs/src/content/docs/changelog/v0.35.0.md index 6e92ba0d..9f97d0e3 100644 --- a/docs/src/content/docs/changelog/v0.35.0.md +++ b/docs/src/content/docs/changelog/v0.35.0.md @@ -38,4 +38,7 @@ slug: changelog/v0.35.0 [#4480](https://github.com/lovell/sharp/issues/4480) [@eddienubes](https://github.com/eddienubes) +* Ensure HEIF primary item is used as default page/frame. + [#4487](https://github.com/lovell/sharp/issues/4487) + * Add WebP `exact` option for control over transparent pixel colour values. diff --git a/src/common.cc b/src/common.cc index 22d74265..882e22da 100644 --- a/src/common.cc +++ b/src/common.cc @@ -426,7 +426,7 @@ namespace sharp { } if (ImageTypeSupportsPage(imageType)) { option->set("n", descriptor->pages); - option->set("page", descriptor->page); + option->set("page", std::max(0, descriptor->page)); } switch (imageType) { case ImageType::SVG: @@ -456,6 +456,22 @@ namespace sharp { return option; } + /* + Should HEIF image be re-opened using the primary item? + */ + static bool HeifPrimaryPageReopen(VImage image, InputDescriptor *descriptor, vips::VOption *option) { + if (image.get_typeof(VIPS_META_N_PAGES) == G_TYPE_INT && image.get_typeof("heif-primary") == G_TYPE_INT) { + if (image.get_int(VIPS_META_N_PAGES) > 1 && descriptor->pages == 1 && descriptor->page == -1) { + int const pagePrimary = image.get_int("heif-primary"); + if (pagePrimary != 0) { + descriptor->page = pagePrimary; + return true; + } + } + } + return false; + } + /* Open an image from the given InputDescriptor (filesystem, compressed buffer, raw pixel data) */ @@ -490,6 +506,9 @@ namespace sharp { image = VImage::new_from_buffer(descriptor->buffer, descriptor->bufferLength, nullptr, option); if (imageType == ImageType::SVG || imageType == ImageType::PDF || imageType == ImageType::MAGICK) { image = SetDensity(image, descriptor->density); + } else if (imageType == ImageType::HEIF && HeifPrimaryPageReopen(image, descriptor, option)) { + option = GetOptionsForImageType(imageType, descriptor); + image = VImage::new_from_buffer(descriptor->buffer, descriptor->bufferLength, nullptr, option); } } catch (vips::VError const &err) { throw vips::VError(std::string("Input buffer has corrupt header: ") + err.what()); @@ -577,6 +596,9 @@ namespace sharp { image = VImage::new_from_file(descriptor->file.data(), option); if (imageType == ImageType::SVG || imageType == ImageType::PDF || imageType == ImageType::MAGICK) { image = SetDensity(image, descriptor->density); + } else if (imageType == ImageType::HEIF && HeifPrimaryPageReopen(image, descriptor, option)) { + option = GetOptionsForImageType(imageType, descriptor); + image = VImage::new_from_file(descriptor->file.data(), option); } } catch (vips::VError const &err) { throw vips::VError(std::string("Input file has corrupt header: ") + err.what()); diff --git a/src/common.h b/src/common.h index 01fee215..e43856b5 100644 --- a/src/common.h +++ b/src/common.h @@ -105,7 +105,7 @@ namespace sharp { rawPremultiplied(false), rawPageHeight(0), pages(1), - page(0), + page(-1), createChannels(0), createWidth(0), createHeight(0), diff --git a/src/pipeline.cc b/src/pipeline.cc index c45279a2..2de6d43e 100644 --- a/src/pipeline.cc +++ b/src/pipeline.cc @@ -84,7 +84,7 @@ class PipelineWorker : public Napi::AsyncWorker { if (nPages == -1) { // Resolve the number of pages if we need to render until the end of the document nPages = image.get_typeof(VIPS_META_N_PAGES) != 0 - ? image.get_int(VIPS_META_N_PAGES) - baton->input->page + ? image.get_int(VIPS_META_N_PAGES) - std::max(0, baton->input->page) : 1; } diff --git a/test/fixtures/index.js b/test/fixtures/index.js index 3cd588dd..cb7fce53 100644 --- a/test/fixtures/index.js +++ b/test/fixtures/index.js @@ -127,7 +127,7 @@ module.exports = { inputSvgSmallViewBox: getPath('circle.svg'), inputSvgWithEmbeddedImages: getPath('struct-image-04-t.svg'), // https://dev.w3.org/SVG/profiles/1.2T/test/svg/struct-image-04-t.svg inputAvif: getPath('sdr_cosmos12920_cicp1-13-6_yuv444_full_qp10.avif'), // CC by-nc-nd https://github.com/AOMediaCodec/av1-avif/tree/master/testFiles/Netflix - + inputAvifWithPitmBox: getPath('pitm.avif'), // https://github.com/lovell/sharp/issues/4487 inputJPGBig: getPath('flowers.jpeg'), inputPngDotAndLines: getPath('dot-and-lines.png'), diff --git a/test/fixtures/pitm.avif b/test/fixtures/pitm.avif new file mode 100644 index 0000000000000000000000000000000000000000..06dd34ac29373525240b33d3a31ffedb04bb0d4c GIT binary patch literal 66801 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ßM(7U=}s~aS2glItG`YL`T5k9!t^!{4D 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 { it('called without options does not throw an error', () => { @@ -17,16 +23,13 @@ describe('AVIF', () => { }); it('can convert AVIF to JPEG', async () => { - const data = await sharp(inputAvif) - .resize(32) - .jpeg() - .toBuffer(); + const data = await sharp(inputAvif).resize(32).jpeg().toBuffer(); const { size, ...metadata } = await sharp(data).metadata(); void size; assert.deepStrictEqual(metadata, { autoOrient: { height: 13, - width: 32 + width: 32, }, channels: 3, chromaSubsampling: '4:2:0', @@ -41,7 +44,7 @@ describe('AVIF', () => { isProgressive: false, isPalette: false, space: 'srgb', - width: 32 + width: 32, }); }); @@ -55,7 +58,7 @@ describe('AVIF', () => { assert.deepStrictEqual(metadata, { autoOrient: { height: 26, - width: 32 + width: 32, }, channels: 3, compression: 'av1', @@ -70,7 +73,7 @@ describe('AVIF', () => { pagePrimary: 0, pages: 1, space: 'srgb', - width: 32 + width: 32, }); }); @@ -84,7 +87,7 @@ describe('AVIF', () => { assert.deepStrictEqual(metadata, { autoOrient: { height: 24, - width: 32 + width: 32, }, channels: 3, compression: 'av1', @@ -99,20 +102,18 @@ describe('AVIF', () => { pagePrimary: 0, pages: 1, space: 'srgb', - width: 32 + width: 32, }); }); it('can passthrough AVIF', async () => { - const data = await sharp(inputAvif) - .resize(32) - .toBuffer(); + const data = await sharp(inputAvif).resize(32).toBuffer(); const { size, ...metadata } = await sharp(data).metadata(); void size; assert.deepStrictEqual(metadata, { autoOrient: { height: 13, - width: 32 + width: 32, }, channels: 3, compression: 'av1', @@ -127,7 +128,7 @@ describe('AVIF', () => { pagePrimary: 0, pages: 1, space: 'srgb', - width: 32 + width: 32, }); }); @@ -141,7 +142,7 @@ describe('AVIF', () => { assert.deepStrictEqual(metadata, { autoOrient: { height: 300, - width: 10 + width: 10, }, channels: 4, compression: 'av1', @@ -156,7 +157,7 @@ describe('AVIF', () => { pagePrimary: 0, pages: 1, space: 'srgb', - width: 10 + width: 10, }); }); @@ -171,7 +172,7 @@ describe('AVIF', () => { assert.deepStrictEqual(metadata, { autoOrient: { height: 26, - width: 32 + width: 32, }, channels: 3, compression: 'av1', @@ -186,30 +187,37 @@ describe('AVIF', () => { pagePrimary: 0, pages: 1, space: 'srgb', - width: 32 + width: 32, }); }); it('Invalid width - too large', async () => assert.rejects( - () => sharp({ create: { width: 16385, height: 16, channels: 3, background: 'red' } }).avif().toBuffer(), - /Processed image is too large for the HEIF format/ - ) - ); + () => + sharp({ + create: { width: 16385, height: 16, channels: 3, background: 'red' }, + }) + .avif() + .toBuffer(), + /Processed image is too large for the HEIF format/, + )); it('Invalid height - too large', async () => assert.rejects( - () => sharp({ create: { width: 16, height: 16385, channels: 3, background: 'red' } }).avif().toBuffer(), - /Processed image is too large for the HEIF format/ - ) - ); + () => + sharp({ + create: { width: 16, height: 16385, channels: 3, background: 'red' }, + }) + .avif() + .toBuffer(), + /Processed image is too large for the HEIF format/, + )); it('Invalid bitdepth value throws error', () => assert.throws( () => sharp().avif({ bitdepth: 11 }), - /Expected 8, 10 or 12 for bitdepth but received 11 of type number/ - ) - ); + /Expected 8, 10 or 12 for bitdepth but received 11 of type number/, + )); it('Different tune options result in different file sizes', async () => { const ssim = await sharp(inputJpg) @@ -221,5 +229,47 @@ describe('AVIF', () => { .avif({ tune: 'iq', effort: 0 }) .toBuffer(); assert(ssim.length < iq.length); - }) + }); + + it('AVIF with non-zero primary item uses it as default page', async () => { + const { exif, ...metadata } = await sharp(inputAvifWithPitmBox).metadata(); + void exif; + assert.deepStrictEqual(metadata, { + format: 'heif', + width: 4096, + height: 800, + space: 'srgb', + channels: 3, + depth: 'uchar', + isProgressive: false, + isPalette: false, + bitsPerSample: 8, + pages: 5, + pagePrimary: 4, + compression: 'av1', + resolutionUnit: 'cm', + hasProfile: false, + hasAlpha: false, + autoOrient: { width: 4096, height: 800 }, + }); + + const data = await sharp(inputAvifWithPitmBox) + .png({ compressionLevel: 0 }) + .toBuffer(); + const { size, ...pngMetadata } = await sharp(data).metadata(); + assert.deepStrictEqual(pngMetadata, { + format: 'png', + width: 4096, + height: 800, + space: 'srgb', + channels: 3, + depth: 'uchar', + isProgressive: false, + isPalette: false, + bitsPerSample: 8, + hasProfile: false, + hasAlpha: false, + autoOrient: { width: 4096, height: 800 }, + }); + }); });