termimage 1.2.2

Display images in your terminal, kind of
Documentation
extern crate termimage;
extern crate image;

use std::process::exit;
use image::GenericImageView;
use std::io::{BufWriter, Write, stdout, stderr};


fn main() {
    let result = actual_main();
    exit(result);
}

fn actual_main() -> i32 {
    if let Err(err) = result_main() {
        err.print_error(&mut stderr());
        err.exit_value()
    } else {
        0
    }
}

fn result_main() -> Result<(), termimage::Error> {
    let opts = termimage::Options::parse();

    let format = termimage::ops::guess_format(&opts.image)?;
    let img = termimage::ops::load_image(&opts.image, format)?;

    let img_s = termimage::ops::image_resized_size(img.dimensions(), opts.size, opts.preserve_aspect);
    let resized = termimage::ops::resize_image(&img, img_s);

    match opts.ansi_out {
        Some(ansi) => {
            let mut out = BufWriter::new(stdout().lock());
            match ansi {
                termimage::AnsiOutputFormat::Truecolor => termimage::ops::write_ansi_truecolor(&mut out, &resized),
                termimage::AnsiOutputFormat::SimpleWhite => termimage::ops::write_ansi(&mut out, &resized, &termimage::util::ANSI_COLOURS_WHITE_BG),
                termimage::AnsiOutputFormat::SimpleBlack => termimage::ops::write_ansi(&mut out, &resized, &termimage::util::ANSI_COLOURS_BLACK_BG),
            }
            out.flush().unwrap();
        }
        None => termimage::ops::write_no_ansi(&resized),
    }

    Ok(())
}