This commit is contained in:
		
							parent
							
								
									104b4eb780
								
							
						
					
					
						commit
						4148c6dc9b
					
				| 
						 | 
					@ -1,9 +1,74 @@
 | 
				
			||||||
fn main() {
 | 
					use image::GenericImageView;
 | 
				
			||||||
    println!("hello, world");
 | 
					use std::io::Write;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let bruh: &str = "hello";
 | 
					fn convert_images_to_ascii() -> std::io::Result<()> {
 | 
				
			||||||
 | 
					    let path = std::path::Path::new("/home/vomitblood/Pictures/staging/vomitbloodnft 1080p.png");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    println!("bruh this is one of the worst things of all time");
 | 
					    let img = image::open(path).unwrap();
 | 
				
			||||||
 | 
					    let ascii_art = convert_image_to_unicode_small(&img);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    println!("{}", bruh);
 | 
					    let output_path = std::path::Path::new("/home/vomitblood/Pictures/staging/vomitbloodnft.txt");
 | 
				
			||||||
 | 
					    let mut file = std::fs::File::create(output_path)?;
 | 
				
			||||||
 | 
					    file.write_all(ascii_art.as_bytes())?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    println!("Converted images to ASCII");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn convert_image_to_unicode_small(img: &image::DynamicImage) -> String {
 | 
				
			||||||
 | 
					    let mut unicode_sprite = String::new();
 | 
				
			||||||
 | 
					    let (width, height) = img.dimensions();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for y in (0..height).step_by(2) {
 | 
				
			||||||
 | 
					        for x in 0..width {
 | 
				
			||||||
 | 
					            let upper_pixel = img.get_pixel(x, y);
 | 
				
			||||||
 | 
					            let lower_pixel = if y + 1 < height {
 | 
				
			||||||
 | 
					                img.get_pixel(x, y + 1)
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // fallback to upper pixel if there's no lower pixel.
 | 
				
			||||||
 | 
					                upper_pixel
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if upper_pixel[3] == 0 && lower_pixel[3] == 0 {
 | 
				
			||||||
 | 
					                unicode_sprite.push(' ');
 | 
				
			||||||
 | 
					            } else if upper_pixel[3] == 0 {
 | 
				
			||||||
 | 
					                unicode_sprite.push_str(&get_color_escape_code(lower_pixel, false));
 | 
				
			||||||
 | 
					                unicode_sprite.push('▄');
 | 
				
			||||||
 | 
					            } else if lower_pixel[3] == 0 {
 | 
				
			||||||
 | 
					                unicode_sprite.push_str(&get_color_escape_code(upper_pixel, false));
 | 
				
			||||||
 | 
					                unicode_sprite.push('▀');
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                unicode_sprite.push_str(&get_color_escape_code(upper_pixel, false));
 | 
				
			||||||
 | 
					                unicode_sprite.push_str(&get_color_escape_code(lower_pixel, true));
 | 
				
			||||||
 | 
					                unicode_sprite.push('▀');
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            unicode_sprite.push_str("\x1b[0m"); // Reset ANSI code after each character
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        unicode_sprite.push('\n'); // New line for each row, plus reset might be added here too if colors extend beyond.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    unicode_sprite
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn get_color_escape_code(pixel: image::Rgba<u8>, background: bool) -> String {
 | 
				
			||||||
 | 
					    if pixel[3] == 0 {
 | 
				
			||||||
 | 
					        return format!("{}", crossterm::style::ResetColor);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let color = crossterm::style::Color::Rgb {
 | 
				
			||||||
 | 
					        r: pixel[0],
 | 
				
			||||||
 | 
					        g: pixel[1],
 | 
				
			||||||
 | 
					        b: pixel[2],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if background {
 | 
				
			||||||
 | 
					        format!("{}", crossterm::style::SetBackgroundColor(color))
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        format!("{}", crossterm::style::SetForegroundColor(color))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn main() {
 | 
				
			||||||
 | 
					    convert_images_to_ascii().unwrap();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue