diff --git a/docs/src/content/docs/changelog/v0.34.4.md b/docs/src/content/docs/changelog/v0.34.4.md new file mode 100644 index 00000000..5ff63571 --- /dev/null +++ b/docs/src/content/docs/changelog/v0.34.4.md @@ -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) diff --git a/src/pipeline.cc b/src/pipeline.cc index 3aa526f3..cd4b468c 100644 --- a/src/pipeline.cc +++ b/src/pipeline.cc @@ -98,7 +98,6 @@ class PipelineWorker : public Napi::AsyncWorker { if (baton->input->autoOrient) { // Rotate and flip image according to Exif orientation std::tie(autoRotation, autoFlip, autoFlop) = CalculateExifRotationAndFlip(sharp::ExifOrientation(image)); - image = sharp::RemoveExifOrientation(image); } rotation = CalculateAngleRotation(baton->angle); @@ -294,6 +293,9 @@ class PipelineWorker : public Napi::AsyncWorker { 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 inputWidth = image.width(); diff --git a/test/unit/raw.js b/test/unit/raw.js index 9a01d0f0..4385288c 100644 --- a/test/unit/raw.js +++ b/test/unit/raw.js @@ -322,8 +322,6 @@ describe('Raw pixel data', function () { .gif({ keepDuplicateFrames: true }) .toBuffer(); - console.log(await sharp(gif).metadata()); - const { width, height, pages, delay } = await sharp(gif).metadata(); assert.strictEqual(width, 1); assert.strictEqual(height, 1); diff --git a/test/unit/rotate.js b/test/unit/rotate.js index 7c317550..218f4f99 100644 --- a/test/unit/rotate.js +++ b/test/unit/rotate.js @@ -635,6 +635,19 @@ describe('Rotation', function () { 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', () => assert.throws( () => sharp({ autoOrient: 'fail' }),