From e57c1c9322bf0620514838e7203a87eef657a13b Mon Sep 17 00:00:00 2001 From: electria Date: Sat, 1 Aug 2026 10:22:41 -0700 Subject: [PATCH 1/2] fix: jxls being rotated twice --- src/utils.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/utils.rs b/src/utils.rs index 474c3b3..ae1dbb1 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,5 +1,6 @@ use std::{ borrow::Cow, + ffi::OsStr, path::{Path, PathBuf}, }; @@ -11,7 +12,7 @@ pub fn load_image(path: impl AsRef) -> Result { load_image_impl(path).map_err(|e| e.to_string()) } fn load_image_impl(path: impl AsRef) -> ImageResult { - let mut decoder = ImageReader::open(path)? + let mut decoder = ImageReader::open(&path)? .with_guessed_format()? .into_decoder()?; @@ -19,7 +20,17 @@ fn load_image_impl(path: impl AsRef) -> ImageResult { let mut decoded_image = DynamicImage::from_decoder(decoder)?; - decoded_image.apply_orientation(oreintation); + // the condition is a workaround to not rotate JXL images twice; + // since they are already rotated by the decoder + // (while jpegs for instance aren't) + if !path + .as_ref() + .extension() + .map(OsStr::to_string_lossy) + .is_some_and(|s| s == "jxl") + { + decoded_image.apply_orientation(oreintation); + } Ok(decoded_image.into_rgba8()) } From ae9b3e2b077e417b3dbd7bab89411778d6fc49d7 Mon Sep 17 00:00:00 2001 From: electria Date: Mon, 3 Aug 2026 11:00:15 -0700 Subject: [PATCH 2/2] docs: add readme --- README.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..28fee18 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# imagey + +image viewer and maybe editor; inspired by mpv's simplicity + +name is subject to change, suggestions welcome :) + +## usage + +```sh +# try it out! +nix run git+https://git.federated.nexus/electria/imagey + +# install it imperatively +nix profile install git+https://git.federated.nexus/electria/imagey +``` + +## known issues + +### JXL + +1. encoding is not implemented (jxl-oxide is decoding-only) +2. oreintation is incorrect in some cases + + if the image has metadata oreintation AND + + it's a jxl without the right extension OR + it's a jpeg with the jxl extension + + this is due to the JXL decoder automatically rotating the image, + while the JPEG decoder (for instance) requires the extra step. + + my workaround is to check the path of the input file, + not changing the oreintation if it has the jxl extension; + causing these caveats for cases where the extension is wrong. + +### clipboard + +1. large images (eg photos) don't seem to copy on linux/wayland, + (despite set_image not returning any error)