Files
stoatchat/crates/services/autumn/src/utils.rs
İspik d76a71141f fix: don't strip ICC from exif (#735)
* fix: don't strip ICC from exif

Signed-off-by: ispik <ispik@ispik.dev>

* fix: refactor ICC profile handling in image processing

Signed-off-by: ispik <ispik@ispik.dev>

---------

Signed-off-by: ispik <ispik@ispik.dev>
2026-05-08 15:49:31 -07:00

32 lines
1.0 KiB
Rust

/// Convert image to sRGB using the provided ICC profile.
/// Returns the converted image, or the original if conversion fails.
pub fn apply_icc_profile(image: image::DynamicImage, icc: &[u8]) -> image::DynamicImage {
let Ok(src_profile) = lcms2::Profile::new_icc(icc) else {
return image;
};
let dst_profile = lcms2::Profile::new_srgb();
let format = if image.color().has_alpha() {
lcms2::PixelFormat::RGBA_8
} else {
lcms2::PixelFormat::RGB_8
};
let Ok(t) = lcms2::Transform::new(
&src_profile,
format,
&dst_profile,
format,
lcms2::Intent::Perceptual,
) else {
return image;
};
if image.color().has_alpha() {
let mut rgba_image = image.into_rgba8();
t.transform_in_place(rgba_image.as_mut());
image::DynamicImage::ImageRgba8(rgba_image)
} else {
let mut rgb_image = image.into_rgb8();
t.transform_in_place(rgb_image.as_mut());
image::DynamicImage::ImageRgb8(rgb_image)
}
}