extern crate exr;
extern crate smallvec;
use std::{ffi::OsStr, io::Cursor, path::PathBuf};
use exr::{image::validate_results::ValidateResult, meta::header::Header, prelude::*};
use rayon::{iter::ParallelIterator, prelude::IntoParallelIterator};
fn exr_files() -> impl Iterator<Item = PathBuf> {
walkdir::WalkDir::new("tests/images/valid")
.into_iter()
.map(std::result::Result::unwrap)
.filter(|entry| entry.path().extension() == Some(OsStr::new("exr")))
.map(walkdir::DirEntry::into_path)
}
#[test]
#[ignore]
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, false);
println!("{:?}: \t\t\t {:?}", path.file_name().unwrap(), meta.unwrap());
});
}
#[test]
#[ignore]
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, false).unwrap();
let has_preview = meta.headers.iter().any(|header: &Header| {
header.own_attributes.preview.is_some()
|| header.own_attributes.other.values().any(|value| match value {
AttributeValue::Preview(_) => true,
_ => false,
})
});
if has_preview {
println!("Found preview attribute in {:?}", path.file_name().unwrap());
}
});
}
#[ignore]
#[test]
pub fn convert_to_dwa() {
let path = "tests/images/valid/custom/compression_methods/f32/pxr24.exr";
let mut image = read()
.no_deep_data()
.all_resolution_levels()
.all_channels()
.all_layers()
.all_attributes()
.non_parallel()
.from_file(path)
.unwrap();
for layer in &mut image.layer_data {
layer.encoding.compression = Compression::DWAA(Some(45.0));
}
image.write().to_file("debug_dwaa.exr").unwrap();
}
#[test]
#[ignore]
pub fn test_roundtrip() {
let path = "tests/images/valid/custom/compression_methods/f32/pxr24.exr";
println!("{:?}", exr::meta::MetaData::read_from_file(path, true));
let read_image = read()
.no_deep_data()
.all_resolution_levels()
.all_channels()
.all_layers()
.all_attributes()
.non_parallel();
let image = read_image.clone().from_file(path).unwrap();
let mut tmp_bytes = Vec::new();
image.write().to_buffered(Cursor::new(&mut tmp_bytes)).unwrap();
image.write().to_file("debug_pxr24.exr").unwrap();
let image2 = read_image.from_buffered(Cursor::new(tmp_bytes)).unwrap();
image.assert_equals_result(&image2);
}