A Python library and CLI tool to convert images to ASCII art and pixel-perfect HTML/SVG.
Project description
img2ascii-py
A high-performance Python library and command-line (CLI) utility that converts images into beautiful, styled ASCII art or pixel-exact HTML/CSS output.
Built with performance in mind using fully vectorized NumPy operations, img2ascii-py generates highly optimized terminal ANSI truecolor prints and run-length compressed HTML web pages.
Features
- Vectorized Core: Color pre-processing (gamma, brightness, contrast) and block downsampling are fully vectorized using NumPy.
- Terminal Truecolor: Output ASCII art in 24-bit ANSI colors with a state-machine that minimizes escape-sequence overhead.
- Pixel-Exact HTML: Render pixel-art pages utilizing Run-Length Encoding (RLE) to bundle matching color spans and optimize filesize.
- Curated Preset Ramps: Includes preset charsets:
standard:.:-=+*#%@detailed:$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i! lI;:,"^'. `blocks:░▒▓█binary:#minimal:.o0@- Custom: Pass any string directly as your ramp!
- Smart Image Handling: Automatically transposes images based on EXIF rotation tags and handles transparent PNG alpha channels gracefully.
- Full Stream Piping: Pipe binary image streams directly into the CLI via
stdin.
Installation
Install the package directly from PyPI:
pip install img2ascii-py
Optional Extras
- To enable faster image sampling (via Numba JIT compilation):
pip install "img2ascii-py[fast]"
- To enable edge-detection enhancement filters:
pip install "img2ascii-py[edges]"
- Install all features at once:
pip install "img2ascii-py[fast,edges]"
CLI Usage
When installed, the img2ascii command is added to your path.
img2ascii --help
Quick Examples
1. Basic Grayscale ASCII Art
Scale an image to a custom width and save the text file:
img2ascii path/to/image.jpg --width 80 > art.txt
2. Colored Terminal Print
Display the image directly inside the terminal with 24-bit ANSI colors:
img2ascii path/to/image.jpg --width 100 --color
3. Pixel-Exact HTML/CSS Output
Convert an image to a pixel-perfect HTML webpage using color-grouped HTML spans:
img2ascii path/to/image.jpg --width 150 --mode pixel > page.html
4. Piping from Standard Input
Send binary stream output into the converter:
cat input.png | img2ascii - --width 60 > output.txt
5. JIT-Accelerated Fast Mode
Enable performance JIT acceleration using Numba for processing high-resolution files:
img2ascii path/to/large_image.jpg --width 200 --fast
6. Edge Detection Enhancement
Overlay edge boundaries using Sobel filters to construct line art matching visual structures:
img2ascii path/to/line_art.png --width 100 --edges
Library API Reference
You can also import and use img2ascii programmatically in your Python scripts.
Grayscale or Colored ASCII Art
from img2ascii.api import convert_to_ascii, AsciiConfig
# Configure settings
config = AsciiConfig(
width=80,
char_aspect=2.0, # Adjusts height/width ratio for terminal fonts
charset="standard", # Supports presets: standard, detailed, blocks, binary, minimal
color=True, # Enable ANSI color escape codes
auto_contrast=True, # Stretch luma values for maximum dynamic range
fast=True, # Optional: Enable Numba JIT acceleration
edges=True # Optional: Enable SciPy Sobel edge-enhancement
)
# Render from file path, raw bytes, or a PIL Image object
art = convert_to_ascii("image.jpg", config)
print(art)
Pixel-Exact Web Output (HTML)
from img2ascii.api import convert_to_pixels, PixelConfig
config = PixelConfig(
width=120,
bg_color="#111111",
glyph="█", # Character block used to draw each pixel
aspect_mode="resize",
fast=True # Optional: Enable Numba JIT acceleration
)
html_code = convert_to_pixels("image.png", config)
with open("output.html", "w") as f:
f.write(html_code)
License
This project is open-source and licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file img2ascii_py-1.1.0.tar.gz.
File metadata
- Download URL: img2ascii_py-1.1.0.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
805c0fd2b34b544a5aed8587e03ccfa390aefa72f28e16912f04157a8a16e16a
|
|
| MD5 |
31fd674f9d7824b17b327ac47027e44d
|
|
| BLAKE2b-256 |
3f9820bc1a2a5d233254f5a141973de45b50921de45e14bac7ccc64893879706
|
File details
Details for the file img2ascii_py-1.1.0-py3-none-any.whl.
File metadata
- Download URL: img2ascii_py-1.1.0-py3-none-any.whl
- Upload date:
- Size: 16.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e547020eaf1a87b52310599f4abef4f7b422e95674a8198f4764e8fa72bb9f01
|
|
| MD5 |
b58119170997fe4701b705491860c884
|
|
| BLAKE2b-256 |
4850ad2bf9424435ae29e9fa5ea4a927455a6e6e6ca85b83d42bd8f10e907150
|