mirror of
https://github.com/waveplate/img2irc.git
synced 2025-06-08 11:19:55 +00:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d75b156abc | ||
![]() |
a935454124 | ||
![]() |
094b438160 | ||
![]() |
6485c7669a | ||
![]() |
5ffa8ef776 | ||
![]() |
b68ff08cb9 | ||
![]() |
bcf5060b7c |
54
README.md
54
README.md
@ -2,10 +2,10 @@
|
||||
|
||||
*img2irc* is a premiere command-line utility which converts images to irc/ansi art, with a lot of post-processing filters
|
||||
|
||||
`$ img2irc https://i.imgur.com/WWSl2Sb.png --render ansi --blocks --width 132 --contrast 50 --nograyscale`
|
||||
`$ img2irc https://i.imgur.com/qP1uBCK.png`
|
||||
|
||||
>
|
||||
>
|
||||
>
|
||||
>
|
||||
|
||||
# how to install
|
||||
@ -31,6 +31,30 @@
|
||||
> [!NOTE]
|
||||
> if you like this project, i would appreciate you giving it a vote on the [aur](https://aur.archlinux.org/packages/img2irc-bin)!
|
||||
|
||||
# font installation (recommended)
|
||||
|
||||
certain glyph types (triangle, corner, geometric, box, legacy) require google's noto fonts extras to render correctly. full, half, quarter and eighth blocks typically work without extra fonts.
|
||||
|
||||
## debian/ubuntu
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install fonts-noto
|
||||
```
|
||||
|
||||
## arch linux
|
||||
|
||||
```bash
|
||||
sudo pacman -S noto-fonts noto-fonts-extra
|
||||
```
|
||||
|
||||
## windows
|
||||
|
||||
1. download the latest noto-fonts zip from https://github.com/googlefonts/noto-fonts/releases/latest
|
||||
2. extract the archive
|
||||
3. install the .ttf files you need (e.g., noto sans symbols, noto sans symbols 2) by right-clicking → install, or copy them to c:\windows\fonts
|
||||
|
||||
|
||||
# usage
|
||||
|
||||
`img2irc <URL or PATH> [OPTIONS]`
|
||||
@ -49,9 +73,9 @@
|
||||
|
||||
### colours rendering modes
|
||||
|
||||
| option | description |
|
||||
|----------------------------------------|---------------------------------------------------------------|
|
||||
| --render | colour rendering mode (default: `irc`) |
|
||||
| option | description | default |
|
||||
|----------------------------------------|-----------------------------|------------------|
|
||||
| --render | colour rendering mode | `ansi` |
|
||||
|
||||
`irc` mode has 99 colours, (6.62-bit)
|
||||
|
||||
@ -59,22 +83,22 @@
|
||||
|
||||
`ansi24` has 16777216 colours (24-bit)
|
||||
|
||||
### pixel rendering modes (select one)
|
||||
### pixel rendering modes
|
||||
|
||||
| option | description |
|
||||
|---------------|-------------------------------|
|
||||
| `--braille` | use braille pixels |
|
||||
| `--blocks[=types]` | use block pixels of the provided types. defaults to `full,half,quarter,eighth,triangle,corner,geometric,box,legacy` |
|
||||
| option | description | default |
|
||||
|---------------|-------------------------------|--------------|
|
||||
| `--braille` | use braille pixels | `false` |
|
||||
| `--blocks[=types]` | use block pixels of the provided types | `full,half,quarter,eighth,triangle,corner,geometric,box,legacy` |
|
||||
|
||||
#### braille mode
|
||||
|
||||
`--braille` uses 2×4 braille dot patterns, doubling horizontal and octupling vertical resolution
|
||||
`--braille` uses 2×4 braille dot patterns, doubling horizontal and quadrupling vertical resolution
|
||||
|
||||
#### block modes
|
||||
|
||||
| type | description | unicode range |
|
||||
|-----------|----------------------|----------------|
|
||||
| `full` | full block | 0x2588 |
|
||||
| `full` | full block | 0x20 + 0x2588 |
|
||||
| `half` | half block | 0x2580-0x2590 |
|
||||
| `quarter` | quarter block | 0x2596-0x259F |
|
||||
| `eighth` | eighth block | 0x2581-0x2595 |
|
||||
@ -86,7 +110,7 @@
|
||||
|
||||
specifying `--blocks` with no value uses all available glyph types
|
||||
|
||||
`full` only uses the fullblock glyph
|
||||
`full` only uses the ASCII space and fullblock glyph
|
||||
|
||||
`half` increases the vertical resolution twofold
|
||||
|
||||
@ -102,6 +126,8 @@ specifying `--blocks` with no value uses all available glyph types
|
||||
|
||||
`box` uses some box-drawing characters
|
||||
|
||||
`legacy` uses some legacy geometric shapes
|
||||
|
||||
> see `src/chars.rs` for the actual glyphs and bitmaps or read `utils/README.md` for information on how to generate a custom `chars.rs` file
|
||||
|
||||
### image processing options
|
||||
@ -149,3 +175,5 @@ specifying `--blocks` with no value uses all available glyph types
|
||||
| --frostedglass | blurred, frosted appearance as if viewed through semi-transparent surface | false |
|
||||
| --solarize | strange, otherworldly appearance with inverted colors and surreal atmosphere | false |
|
||||
| --edgedetection | highlights edges and boundaries in an image | false |
|
||||
|
||||

|
||||
|
@ -77,7 +77,7 @@ pub struct Args {
|
||||
pub flipv: bool,
|
||||
|
||||
/// colour mode to use
|
||||
#[arg(long, value_enum, default_value_t = Render::Irc)]
|
||||
#[arg(long, value_enum, default_value_t = Render::Ansi)]
|
||||
pub render: Render,
|
||||
|
||||
/// use braille pixels
|
||||
@ -85,7 +85,6 @@ pub struct Args {
|
||||
long,
|
||||
default_value_t = false,
|
||||
conflicts_with = "block",
|
||||
required_unless_present = "blocks"
|
||||
)]
|
||||
pub braille: bool,
|
||||
|
||||
@ -95,7 +94,7 @@ pub struct Args {
|
||||
value_enum,
|
||||
value_delimiter = ',',
|
||||
num_args = 0..,
|
||||
default_missing_values = &[
|
||||
default_values = &[
|
||||
"full",
|
||||
"half",
|
||||
"quarter",
|
||||
@ -107,7 +106,6 @@ pub struct Args {
|
||||
"legacy",
|
||||
],
|
||||
conflicts_with = "braille",
|
||||
required_unless_present = "braille"
|
||||
)]
|
||||
pub blocks: Vec<BlockKind>,
|
||||
|
||||
|
22
src/main.rs
22
src/main.rs
@ -15,25 +15,23 @@ async fn main() {
|
||||
|
||||
match load_image_from_url_or_path(args.image.as_str()).await {
|
||||
Ok(image) => {
|
||||
let image_luma = effects::apply_luma_effects(&args, image.clone());
|
||||
let image_chroma = effects::apply_effects(&args, image.clone());
|
||||
|
||||
let canvas_luma = draw::AnsiImage::new(image_luma.clone());
|
||||
let canvas_chroma = draw::AnsiImage::new(image_chroma.clone());
|
||||
let image = effects::apply_effects(&args, image.clone());
|
||||
let canvas = draw::AnsiImage::new(image.clone());
|
||||
|
||||
if args.braille {
|
||||
// Braille rendering
|
||||
let image_luma = effects::apply_luma_effects(&args, image.clone());
|
||||
let canvas_luma = draw::AnsiImage::new(image_luma.clone());
|
||||
match args.render {
|
||||
args::Render::Irc => println!("{}", draw::render_braille(&canvas_luma, &canvas_chroma, &args, args::Render::Irc)),
|
||||
args::Render::Ansi => println!("{}", draw::render_braille(&canvas_luma, &canvas_chroma, &args, args::Render::Ansi)),
|
||||
args::Render::Ansi24 => println!("{}", draw::render_braille(&canvas_luma, &canvas_chroma, &args, args::Render::Ansi24)),
|
||||
args::Render::Irc => println!("{}", draw::render_braille(&canvas_luma, &canvas, &args, args::Render::Irc)),
|
||||
args::Render::Ansi => println!("{}", draw::render_braille(&canvas_luma, &canvas, &args, args::Render::Ansi)),
|
||||
args::Render::Ansi24 => println!("{}", draw::render_braille(&canvas_luma, &canvas, &args, args::Render::Ansi24)),
|
||||
}
|
||||
} else {
|
||||
// Block rendering
|
||||
match args.render {
|
||||
args::Render::Irc => println!("{}", draw::render_blocks(&canvas_chroma, &args, args::Render::Irc)),
|
||||
args::Render::Ansi => println!("{}", draw::render_blocks(&canvas_chroma, &args, args::Render::Ansi)),
|
||||
args::Render::Ansi24 => println!("{}", draw::render_blocks(&canvas_chroma, &args, args::Render::Ansi24)),
|
||||
args::Render::Irc => println!("{}", draw::render_blocks(&canvas, &args, args::Render::Irc)),
|
||||
args::Render::Ansi => println!("{}", draw::render_blocks(&canvas, &args, args::Render::Ansi)),
|
||||
args::Render::Ansi24 => println!("{}", draw::render_blocks(&canvas, &args, args::Render::Ansi24)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user