main.rs
mod application;
use self::application::Application;
fn main() {
let mut app = Application::new();
app.run();
}
application.rs
use image::io::Reader as ImageReader;
use image::DynamicImage;
pub struct Application {
source: String,
destination: String,
img: Option<DynamicImage>,
}
impl Application {
pub fn new() -> Application {
Application {
source: String::new(),
destination: String::new(),
img: None,
}
}
pub fn run(&mut self) {
self.parse_argument();
self.load_img();
self.process_img();
}
fn parse_argument(&mut self) {
let args: Vec<String> = std::env::args().collect();
if args.len() > 2 {
self.source = args[1].clone();
self.destination = args[2].clone();
} else {
println!("does not exist necessary argument");
std::process::exit(0);
}
}
fn load_img(&mut self) {
if !self.is_exist_src() {
println!("file does not exist.\nplease use path from what you are now");
std::process::exit(0);
}
self.img = Some(ImageReader::open(&self.source).unwrap().decode().unwrap());
}
fn is_exist_src(&self) -> bool {
let src = &(self.source);
std::path::Path::new(src).exists()
}
fn process_img(&mut self) {
let img = self.img.as_ref().unwrap();
let img = img.blur(3.0);
img.save(&self.destination);
}
}