From 7157d2398e3dc29de9dff816236fe96e28c5e118 Mon Sep 17 00:00:00 2001 From: casi3 <47931895+casi-3@users.noreply.github.com> Date: Mon, 3 Aug 2026 21:20:35 +0200 Subject: [PATCH] Apply EXIF orientation when converting images with ImageMagick (#577) --- src/converters/imagemagick.ts | 4 ++++ tests/converters/imagemagick.test.ts | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/converters/imagemagick.ts b/src/converters/imagemagick.ts index 69eb3591..e3fc53c2 100644 --- a/src/converters/imagemagick.ts +++ b/src/converters/imagemagick.ts @@ -468,6 +468,10 @@ export function convert( outputArgs.push("-background", "white", "-alpha", "remove"); } + // Apply EXIF orientation so photos (e.g. from phones) don't end up sideways + // when converted to formats where the orientation tag is lost or ignored + outputArgs.push("-auto-orient"); + return new Promise((resolve, reject) => { execFile( "magick", diff --git a/tests/converters/imagemagick.test.ts b/tests/converters/imagemagick.test.ts index e7b17aa3..f6940459 100644 --- a/tests/converters/imagemagick.test.ts +++ b/tests/converters/imagemagick.test.ts @@ -163,3 +163,19 @@ test("convert respects emf as input filetype", async () => { ); expect(loggedMessage).toBe("stdout: Fake stdout"); }); + +test("convert applies EXIF auto-orient", async () => { + const mockExecFile: ExecFileFn = ( + _cmd: string, + _args: string[], + callback: (err: ExecFileException | null, stdout: string, stderr: string) => void, + ) => { + calls.push(_args); + callback(null, "", ""); + }; + + const result = await convert("input.jpg", "jpg", "png", "output.png", undefined, mockExecFile); + + expect(result).toBe("Done"); + expect(calls[0]).toEqual(expect.arrayContaining(["input.jpg", "-auto-orient", "output.png"])); +});