Image to ASCII — Convert Images to ASCII Art
Convert images to ASCII art in your browser. Adjustable density, monospace and proportional fonts, exports as text or PNG. No uploads, no limits.
Drop an image here
or click to browse — converts to ASCII art
ASCII art is the oldest form of computer graphics — predating bitmapped displays, predating the web, predating pixel fonts. It works because monospace fonts give every character the same width, which means a grid of characters can stand in for a grid of pixels. The mapping from brightness to character is what makes the art readable: dense characters (@, #, %) where the source image is bright, sparse characters (., ,, space) where it is dark, and a smooth ramp in between. The output is text that can be pasted into a code comment, a README, an email, or any context that accepts plain text but not images.
The non-obvious thing about ASCII art is character density. Not all ASCII characters fill the same visual area — a @ is denser than a * is denser than a .. A well-tuned character ramp is the difference between art that looks like the source and art that looks like noise. The standard 70-character ramp ($@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^\'. `) is the de facto standard for terminal art because it covers the full brightness range with smooth gradations between adjacent characters. Shorter ramps (5-10 characters) produce blockier, more pixelated art; longer ramps or Unicode block characters produce smoother gradients.
For a final hand-off: if the destination is a code comment, a README on GitHub, or a chat message, paste the plain-text output directly — most code blocks use monospace fonts and render the alignment correctly. If the destination is social media or a document that does not support monospace fonts well, use the PNG export — the ASCII is rendered in a chosen font and saved as an image that any platform can display. If the destination is a printed page, the PNG export at high resolution is the right pick — small text on paper is illegible, and a rendered PNG scales to whatever size the printer can hold.
How to use
Drop an image
Drag a JPG, PNG, or WebP into the drop zone, or paste from clipboard. The tool downsamples the image to the chosen character grid and maps each cell's brightness to an ASCII character.
Pick a character set
Choose from standard 70-character ASCII ramp, dense 10-character (▓▒░ ), or custom characters. Toggle invert to flip the brightness mapping — useful for dark-on-light vs light-on-dark output.
Copy or download the result
Copy the ASCII art as plain text, download as a .txt file, or export as a PNG with the characters rendered in a monospace font. The PNG export is the right pick for sharing on social media.
Frequently asked
How are characters chosen for each pixel?
The image is downsampled to a grid (default 80 columns wide) and each cell's average brightness is computed. The brightness is mapped to a character in the chosen ramp — sparse characters like space and period for dark cells, dense characters like @ and # for bright cells. The mapping is configurable via the character set selector.
Does color information survive?
By default no — the converter uses luminance only, which is what gives ASCII art its characteristic monochrome look. Toggle ANSI color mode to keep 24-bit RGB values per cell — output is then a colored ASCII rendering that requires a terminal supporting true color to display correctly.
What is the best input image?
High-contrast images with clear silhouettes — portraits, logos, line art — produce the most readable ASCII art. Photos with soft gradients (skies, fog) collapse to a flat character region and lose detail. Pre-process the source by increasing contrast or posterizing it to fewer brightness levels for better ASCII output.
Can I pick a custom character set?
Yes — paste any string of characters into the custom set field and the tool uses them ordered from least dense (left) to most dense (right). Short sets (3-5 characters) produce blocky art; long sets (50+ characters) produce smooth gradients.
Why does the text wrap oddly in my editor?
The output uses fixed-width line breaks matching the chosen column count. If the destination editor uses proportional fonts or auto-wraps, the alignment breaks. Use a monospace font (Menlo, Consolas, Courier) and disable word wrap to preserve the grid alignment.
Limitations
- Monochrome by defaultThe default output is monochrome ASCII. Color is available as a toggle but requires a terminal that supports 24-bit ANSI color codes. The PNG export path renders the ASCII in a chosen font but does not include the source image's colors.
- Resolution is character-grid-limitedThe output resolution is bounded by the character grid. An 80-column ASCII art represents the source as 80 x N characters — the visual fidelity cannot exceed what those characters can express. For higher-fidelity output, increase the column count or use the PNG export at a larger font size.
- Soft gradients collapsePhotos with smooth gradients (sky, fog, skin tones) flatten into runs of the same character because the brightness variation between adjacent cells is below the character set's resolution. Pre-process with a posterize filter to band the gradients into discrete levels.
Platform notes
- macOS
- Terminal.app and iTerm2 both render monospace ASCII art correctly. The browser tool is the right pick for converting an image to a text snippet for a code comment, a README, or a chat message where embedding the actual image is not possible.
- Windows
- Windows Terminal and the new Console Host render monospace correctly. The legacy conhost.exe used by older command prompts does not handle Unicode block characters consistently — use the 70-character ASCII set rather than the Unicode block set for cmd.exe compatibility.
- Linux
- For command-line work, `jp2a input.jpg --output=out.txt` and `ascii-image-converter` are the closest CLI equivalents. The browser tool is the right pick for one-off conversions of images pasted from a chat or email.
- Web
- Runs entirely client-side. Works offline once the page has loaded. Useful for embedding ASCII art in code comments, READMEs, or chat messages where binary images cannot be attached.