extern crate exr;
extern crate smallvec;
use exr::prelude::*;
use exr::image::full::*;
use std::path::{PathBuf};
use std::ffi::OsStr;
use rayon::iter::{IntoParallelIterator, ParallelIterator};
use exr::meta::attributes::{Attribute};
fn exr_files() -> impl Iterator<Item=PathBuf> {
walkdir::WalkDir::new("D:\\Pictures\\openexr").into_iter()
.map(Result::unwrap).filter(|entry| entry.path().extension() == Some(OsStr::new("exr")))
.map(walkdir::DirEntry::into_path)
}
#[test]
fn print_meta_of_all_files() {
let files: Vec<PathBuf> = exr_files().collect();
files.into_par_iter().for_each(|path| {
let meta = MetaData::read_from_file(&path);
println!("{:?}: \t\t\t {:?}", path.file_name().unwrap(), meta.unwrap());
});
}
#[test]
fn search_previews_of_all_files() {
let files: Vec<PathBuf> = exr_files().collect();
files.into_par_iter().for_each(|path| {
let meta = MetaData::read_from_file(&path).unwrap();
let attributes = meta.headers.iter().flat_map(|header| header.own_attributes.list.iter());
let values = attributes.filter(|attribute| attribute.value.to_preview().is_ok());
let values: Vec<&Attribute> = values.collect();
if !values.is_empty() {
println!("{:?}: \t\t\t {:?}", path.file_name().unwrap(), values);
}
});
}
#[test]
pub fn test_write_file() {
let path =
"D:/Pictures/openexr/BeachBall/multipart.0001.exr"
;
let image = Image::read_from_file(path, read_options::high()).unwrap();
Image::write_to_file(&image, "./testout/written.exr", write_options::high()).unwrap();
}