Image to ASCII Art Generator
Drop an image, choose how many columns and which characters to use, and get ASCII art you can copy or download — rendered on your device, never uploaded.
- Free
- No account
- Runs in your browser
- Nothing uploaded
Runs entirely in your browser — your input is never uploaded, logged, or stored.Privacy policy
What is Image to ASCII Art Generator?
This tool turns a still image into ASCII art: a block of monospaced text that, read from far enough away, looks like the picture. Your browser draws the image small, samples the brightness of each cell, and replaces it with a character from a ramp — a space where the picture is lightest and the densest character where it is darkest. It is for making ASCII art from a photo or a logo, and for turning an image into text you can paste into a README, a code comment, a chat message, a terminal banner or a plain-text email. The file is never uploaded to a server.
The output is a rectangle of characters: as many columns as you asked for, and as many rows as keep the picture's shape. A monospaced character is taller than it is wide — roughly twice as tall — so the tool draws about half as many rows as a same-width block of pixels would need, and the art does not come out stretched. Lines are separated by a plain newline character. A space is a real character rather than an empty cell, so a line that looks blank is usually a light part of the picture, not a mistake.
The character ramp is the ordered list of characters from lightest to darkest. The default, ` .:-=+*#%@`, spends ten steps from a space to an at-sign; a longer ramp keeps more shading and a two-character ramp gives a stark black-and-white stencil. The first character is the lightest on purpose, so a normal photo on a white background reads correctly. Tick invert for a dark terminal — the ramp flips, so a space becomes the darkest character and bright pixels carry the weight. Choose Custom to type your own ramp, including block characters like ░▒▓█.
Colour turns each character into 24-bit ANSI: the tool prints an escape sequence before every character that sets its foreground to that cell's colour, and resets at the end of each row. That is the format a terminal reads, not plain ASCII — it shows as ordinary text in an editor and as colour in a terminal. This page previews the characters without the colour codes, because escape sequences are invisible in a web page, so copy and download give you the ANSI text. Leave colour off unless you are pasting into a terminal; it is much longer than the plain version.
Be clear about what this is: a downsampled approximation. Almost all of the picture's detail is thrown away and only one brightness value per character cell survives, so fine features disappear. The proportions you see depend on your viewer's font — the tool assumes a cell about twice as tall as it is wide, and a different font or line height will stretch or squash the result slightly. Gradients look banded, because the ramp has only as many steps as it has characters.
How it works: your browser decodes the image (a phone photo is turned upright using its EXIF orientation), draws it onto a small canvas — one pixel per output column — reads those pixels back, and this tool does the rest in JavaScript on the raw pixel data. Each cell's colour is averaged, composited over white where it was transparent, and reduced to one brightness value with the Rec. 709 luma coefficients. Limits: up to 50 images at a time, 50 MB each, and 1 to 500 columns. Your images stay on your device: the Network tab in your browser's developer tools shows no request carrying them.
1. The file's size is checked (50 MB) before it is read, and its first bytes confirm it is PNG, JPG, WebP, GIF, BMP or AVIF; the browser decodes it upright. 2. The image is drawn onto a small canvas: one pixel wide per output column, and twice as many pixels tall as the output has rows. A 100-column request therefore samples a canvas 100 px wide. 3. Each output cell averages the pixels that fall inside it, compositing each pixel over white using its alpha first (a canvas leaves transparent areas as colourless black, which would otherwise read as dark). 4. The averaged colour becomes one brightness value with the Rec. 709 luma coefficients: luminance = 0.2126 R + 0.7152 G + 0.0722 B. 5. The brightness is scaled onto the ramp: index 0 is the lightest character (a space) for the brightest cells and the last index is the densest for the darkest. A 10-character ramp has 10 steps, each covering about one ninth of the range; invert reverses the direction. 6. The characters are joined into rows separated by newlines. With colour on, each character is preceded by a 24-bit ANSI foreground code (ESC[38;2;R;G;Bm) and each row is closed with ESC[0m. 7. The text is offered for copying and saved as a .txt file named like photo-ascii.txt.
| Ramp | Characters | Best for | |
|---|---|---|---|
| Standard | ` .:-=+*#%@` | 10, from a space to @ | Photographs and general pictures — the default |
| Blocks | ` ░▒▓█` | 5, from a space to a full block | Logos, flat graphics and bold shapes |
| Minimal | ` .#` | 3, from a space to # | Stark silhouettes and text where only the shape matters |
| Classic | The 70-character classic ramp | 70, from a space to @ | Smooth photographs when you want the most shading |
Worked examples
- A pure black pixel (0, 0, 0, 255) lands on the densest character of the default ramp ` .:-=+*#%@` — the `@`.
- A pure white pixel (255, 255, 255, 255) lands on the lightest character — a space.
- Mid grey (128, 128, 128, 255) has a luminance of 128, which is index 4 of the default ramp — the `=` character.
- A single grey step of 85 (one third brightness) lands on `*` — index 6 of the default ramp.
- A single grey step of 170 (two thirds brightness) lands on `-` — index 3 of the default ramp.
- Averaging a black and a white pixel into one cell gives mid grey, so a 2 × 1 image at 1 column prints a single `+`.
- Invert swaps the direction: a black pixel prints a space and a white pixel prints `@`.
- With colour on, a pure red pixel prints ESC[38;2;255;0;0m followed by `#` and then ESC[0m — the character is `#` because red's luminance (54) is dark, at index 7 of the default ramp.
- A 1,000 × 500 image at 100 columns is 25 rows tall, because each character cell is about twice as tall as it is wide.
How to use Image to ASCII Art Generator
- Click "Choose images", drop files on the box, or paste a screenshot with Ctrl+V (Cmd+V on a Mac).
- Set the output width in columns (1 to 500) — 80 fits a standard terminal, while 100 to 200 makes a larger picture.
- Pick a ramp preset, or choose Custom and type your own characters lightest first. Tick invert for a dark terminal, and ANSI colour for a terminal that supports 24-bit colour.
- Click "Make ASCII art", then copy the text or download each result as a .txt file.
Common errors
- "Output width must be a whole number from 1 to 500 columns." — the width box holds a fraction, zero, a negative number or more than 500. Type a whole number; 80 is a good default.
- "The character ramp needs at least 2 characters — it has 1." — a custom ramp of a single character, or an empty one, has nothing to map brightness onto. Use at least two, lightest first, like " .#".
- "The output would be 100 × 20000 pixels — more than a browser can safely draw (100 megapixels, 16,384 px per side). Choose a smaller size." — a very tall, narrow image needs more rows than one canvas holds at that width. Choose fewer columns; the row count falls with it.
- "IMG_1234.jpg" is 62.40 MB, over the 50.00 MB limit for this tool. Everything runs in your browser's memory, so very large files can crash the tab. — resize or compress the file first.
- "IMG_0042.HEIC" is actually a HEIC file, not PNG, JPG, WebP, GIF, BMP or AVIF. The extension does not match the contents — use a HEIC tool for this file. — convert HEIC photos to JPG first.
FAQ
How do I turn an image into ASCII art?
Drop the image in, set how many columns wide you want the result, pick a character ramp, and click "Make ASCII art". Each cell of the picture becomes one character — a space where the picture is light and a denser character where it is dark — and the text is then yours to copy or download. It is converted in your browser and never uploaded.
What does the character ramp do?
The ramp is the list of characters from lightest to darkest that the picture's brightness is mapped onto. A short ramp, like " .#", gives a stark two-tone stencil; a long ramp keeps more shades of grey. The default ten-character ramp is a good middle ground for photographs, and you can type your own — including block characters like ░▒▓█ — under Custom.
Why does my ASCII art look stretched or squashed?
The result assumes a character cell about twice as tall as it is wide, which is typical for a monospaced font. If your viewer uses a different font, line height or letter spacing, the art will stretch or compress a little. Pasting it into a plain monospaced terminal or a code block gives the proportions the tool was designed for.
What is the difference between plain ASCII and the colour output?
Plain output is only the printable characters. Colour output is still ASCII characters, but each one is preceded by a 24-bit ANSI escape sequence that sets its foreground colour to that cell's colour, and each row ends with a reset code. Terminals and many editors show that as colour; everywhere else the escape codes are invisible. This page previews the plain characters and copies the ANSI text.
How many columns should I use?
Eighty columns fits a standard terminal line and reads well in a chat message. A hundred to two hundred columns gives a larger, more detailed picture for a README or a text file, and fewer than forty makes a small thumbnail. Wider output is not more accurate — it is the same picture sampled more finely.
Does a transparent PNG become black in the ASCII art?
No. A transparent pixel is composited over white before its brightness is measured, so transparent areas of a logo become bright and therefore blank. Only the visible colour is sampled; the hidden colour stored under a fully transparent pixel is ignored.
Is my image uploaded to a server?
No. The image is decoded and sampled in your browser, and the text is produced there too. Nothing is transmitted — the Network tab in your browser's developer tools shows no request carrying the image.
Related tools
- Grayscale Image ConverterDrop images, choose a grayscale method or a black-and-white threshold, and download the converted copies — processed on your device, never uploaded.
- Image Background ColorDrop transparent images, choose a colour or a preset swatch, and download the flattened copies — every pixel opaque, processed on your device, never uploaded.
- Invert Image ColorsDrop images, choose whether to keep transparency, and download the inverted copies — processed on your device, never uploaded.
Prefer AllUtil on Google
One click adds AllUtil to your Google preferences. You'll see our tools highlighted with a Preferred badge in Search and AI answers.