use crate::{
error::IoError, jpeg::read_image_jpeg_rgb8, png::read_image_png_rgb8,
tiff::read_image_tiff_rgb8, webp::read_image_webp_rgb8,
};
use kornia_image::color_spaces::Rgb8;
use std::path::Path;
pub fn read_image_any_rgb8(file_path: impl AsRef<Path>) -> Result<Rgb8, IoError> {
let file_path = file_path.as_ref().to_owned();
if !file_path.exists() {
return Err(IoError::FileDoesNotExist(file_path.to_path_buf()));
}
if let Some(extension) = file_path.extension() {
match extension.to_string_lossy().to_lowercase().as_ref() {
"jpeg" | "jpg" => read_image_jpeg_rgb8(file_path),
"png" => read_image_png_rgb8(file_path),
"tiff" => read_image_tiff_rgb8(file_path),
"webp" => read_image_webp_rgb8(file_path),
_ => Err(IoError::InvalidFileExtension(file_path)),
}
} else {
Err(IoError::InvalidFileExtension(file_path))
}
}
#[cfg(test)]
mod tests {
use crate::error::IoError;
use crate::functional::read_image_any_rgb8;
#[test]
fn test_read_any_rgb8() -> Result<(), IoError> {
let image = read_image_any_rgb8("../../tests/data/dog.jpeg")?;
assert_eq!(image.cols(), 258);
assert_eq!(image.rows(), 195);
Ok(())
}
}