psnr/src/main.rs

53 lines
1.3 KiB
Rust

extern crate image;
extern crate psnr;
use std::env::args;
use std::fs;
use image::ImageResult;
use psnr::psnr_files;
fn psnr_dir(path1: &str, path2: &str) -> Vec<(String, ImageResult<f64>)> {
let mut dirs1: Vec<_> = fs::read_dir(path1).unwrap()
.map(|x|x.unwrap())
.filter(|x| x.file_name().into_string().unwrap().ends_with(".png"))
.map(|x| x.file_name().to_owned().into_string().unwrap())
.collect();
let metadata = fs::metadata(path2).unwrap();
let mut dirs2: Vec<_> = if metadata.is_dir() {
fs::read_dir(path2).unwrap()
.map(|x|x.unwrap())
.filter(|x| x.file_name().into_string().unwrap().ends_with(".png"))
.map(|x| x.file_name().to_owned().into_string().unwrap())
.collect()
} else {
vec![path2.to_owned()]
};
dirs1.sort();
dirs2.sort();
let mut res = vec!();
for file in dirs1 {
let p1 = path1.to_owned() + &file;
let p2 = if dirs2.len() != 1 { path2.to_owned() + &file } else { path2.to_owned() };
let psnr = psnr_files(&p1, &p2);
let elt = (file, psnr.unwrap());
println!("{} {}", elt.0, elt.1);
res.push((elt.0, Ok(elt.1)));
}
res
}
fn main() {
let path1 = args().nth(1).unwrap();
let path2 = args().nth(2).unwrap();
let _ = psnr_dir(&path1, &path2);
}