From 831def32a42f7e4f412b0b98b1795a994ffee8b3 Mon Sep 17 00:00:00 2001 From: electria Date: Thu, 2 Jul 2026 15:14:10 -0700 Subject: [PATCH] fix: use exif oreintation https://alexwlchan.net/2025/create-thumbnail-is-exif-aware/ --- src/main.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4a7180e..c02ff95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,10 @@ use iced::{ keyboard::{self, Key, key}, theme, widget, window, }; -use image::{EncodableLayout, ImageReader, RgbaImage, codecs::webp::WebPEncoder, imageops}; +use image::{ + DynamicImage, EncodableLayout, ImageDecoder, ImageReader, RgbaImage, codecs::webp::WebPEncoder, + imageops, +}; use rfd::FileDialog; #[derive(Clone, Debug)] @@ -124,7 +127,27 @@ impl State { } }; - let decoded_image = match reader.decode() { + let mut decoder = match reader.into_decoder() { + Ok(d) => d, + Err(e) => { + return Some(format!( + "failed to create decoder for '{}': {e}", + path.as_ref().display() + )); + } + }; + + let oreintation = match decoder.orientation() { + Ok(o) => o, + Err(e) => { + return Some(format!( + "failed to get oreintation of '{}': {e}", + path.as_ref().display() + )); + } + }; + + let mut decoded_image = match DynamicImage::from_decoder(decoder) { Ok(i) => i, Err(e) => { return Some(format!( @@ -134,6 +157,8 @@ impl State { } }; + decoded_image.apply_orientation(oreintation); + self.image = Some(decoded_image.into_rgba8()); None