53 lines
1.3 KiB
Rust
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);
|
|
}
|