add charset arg and fix charset indexing bug
This commit is contained in:
parent
26b3301a04
commit
60d97109ea
10
src/cli.rs
10
src/cli.rs
@ -42,4 +42,14 @@ pub fn new() -> Command {
|
||||
.value_parser(value_parser!(f64))
|
||||
.default_value("2.3"),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("charset")
|
||||
.short('c')
|
||||
.long("charset")
|
||||
.help("Character set to use in ascending order of pixel value")
|
||||
.action(ArgAction::Set)
|
||||
.value_name("STRING")
|
||||
.value_parser(value_parser!(String))
|
||||
.default_value(" .:-=+*%#@"),
|
||||
)
|
||||
}
|
||||
|
||||
11
src/main.rs
11
src/main.rs
@ -3,14 +3,17 @@ use std::{fmt, fs::File, io, path::PathBuf};
|
||||
|
||||
mod cli;
|
||||
|
||||
const SYMBOLS: &[char] = &[' ', '.', ':', '-', '=', '+', '*', '#', '%', '@'];
|
||||
|
||||
fn main() -> Result<(), &'static str> {
|
||||
let matches = cli::new().get_matches();
|
||||
|
||||
let input_file: &PathBuf = matches.get_one("input").unwrap();
|
||||
let x_stretch: f64 = *matches.get_one("x-stretch").unwrap();
|
||||
let size: u32 = *matches.get_one("size").unwrap();
|
||||
let symbols = matches
|
||||
.get_one::<String>("charset")
|
||||
.unwrap()
|
||||
.chars()
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let img = image::open(input_file).unwrap();
|
||||
let (w, h) = img.dimensions();
|
||||
@ -26,9 +29,9 @@ fn main() -> Result<(), &'static str> {
|
||||
.map(|(_, _, color)| {
|
||||
let sum: u16 = color.0.iter().take(3).map(|&v| v as u16).sum::<u16>();
|
||||
let normalized = sum as f64 / (3.0 * 255.0);
|
||||
let idx = (normalized * SYMBOLS.len() as f64).round() as usize;
|
||||
let idx = (normalized * symbols.len() as f64) as usize;
|
||||
|
||||
SYMBOLS[idx]
|
||||
symbols[idx]
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
.chunks(w as usize)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user