Ensure autoOrient removes metadata after shrink-on-load #4431

This commit is contained in:
Lovell Fuller 2025-07-19 14:00:42 +01:00
parent ecfc77c185
commit 628454559e
4 changed files with 23 additions and 3 deletions

View File

@ -0,0 +1,7 @@
---
title: v0.34.4 - TBD
slug: changelog/v0.34.4
---
* Ensure `autoOrient` removes existing metadata after shrink-on-load.
[#4431](https://github.com/lovell/sharp/issues/4431)

View File

@ -98,7 +98,6 @@ class PipelineWorker : public Napi::AsyncWorker {
if (baton->input->autoOrient) { if (baton->input->autoOrient) {
// Rotate and flip image according to Exif orientation // Rotate and flip image according to Exif orientation
std::tie(autoRotation, autoFlip, autoFlop) = CalculateExifRotationAndFlip(sharp::ExifOrientation(image)); std::tie(autoRotation, autoFlip, autoFlop) = CalculateExifRotationAndFlip(sharp::ExifOrientation(image));
image = sharp::RemoveExifOrientation(image);
} }
rotation = CalculateAngleRotation(baton->angle); rotation = CalculateAngleRotation(baton->angle);
@ -294,6 +293,9 @@ class PipelineWorker : public Napi::AsyncWorker {
throw vips::VError("Input SVG image exceeds 32767x32767 pixel limit"); throw vips::VError("Input SVG image exceeds 32767x32767 pixel limit");
} }
} }
if (baton->input->autoOrient) {
image = sharp::RemoveExifOrientation(image);
}
// Any pre-shrinking may already have been done // Any pre-shrinking may already have been done
inputWidth = image.width(); inputWidth = image.width();

View File

@ -322,8 +322,6 @@ describe('Raw pixel data', function () {
.gif({ keepDuplicateFrames: true }) .gif({ keepDuplicateFrames: true })
.toBuffer(); .toBuffer();
console.log(await sharp(gif).metadata());
const { width, height, pages, delay } = await sharp(gif).metadata(); const { width, height, pages, delay } = await sharp(gif).metadata();
assert.strictEqual(width, 1); assert.strictEqual(width, 1);
assert.strictEqual(height, 1); assert.strictEqual(height, 1);

View File

@ -635,6 +635,19 @@ describe('Rotation', function () {
assert.strictEqual(height, 6); assert.strictEqual(height, 6);
}); });
it('Shrink-on-load with autoOrient', async () => {
const data = await sharp(fixtures.inputJpgWithLandscapeExif6)
.resize(8)
.autoOrient()
.avif({ effort: 0 })
.toBuffer();
const { width, height, orientation } = await sharp(data).metadata();
assert.strictEqual(width, 8);
assert.strictEqual(height, 6);
assert.strictEqual(orientation, undefined);
});
it('Invalid autoOrient throws', () => it('Invalid autoOrient throws', () =>
assert.throws( assert.throws(
() => sharp({ autoOrient: 'fail' }), () => sharp({ autoOrient: 'fail' }),