ASCII Art Generator - Convert a Photo to Text
Each block of the image is measured for brightness and swapped for a character of matching visual weight, so the text itself forms the picture. Copy it as plain text or export it as an image.
How brightness becomes characters
ASCII art works on a simple observation: printed characters differ in how much ink they put on the page. A space covers nothing, a full stop covers very little, and characters like @, # and M fill most of their cell. Order the character set by that visual density and you have a greyscale ramp made of text.
The conversion divides the image into a grid of cells, measures the average brightness of each one, and substitutes the character whose density best matches. Dark regions get heavy characters, light regions get sparse ones. Viewed at normal size the individual letters stop registering and the tonal pattern they form reads as the original picture.
Two things determine whether the result is legible. Contrast matters most: because the ramp from lightest to heaviest character is coarse, a low-contrast photo maps most of its cells to the same few characters and comes out as noise. Pushing contrast up before converting makes a dramatic difference. Composition matters nearly as much, since each cell swallows a whole block of pixels, so a tightly cropped face or a strong silhouette survives where a wide, detailed scene does not.
Displaying it correctly needs a monospace font. In a proportional font every character has a different width, so the columns stop aligning and the picture shears apart. That is why ASCII art lives in terminals, code comments, README files, plain-text email and chat, all environments where fixed-width text is the default. Everything is generated in your browser with nothing uploaded.
How to make ASCII art from a photo
- Crop tight first. A face or a strong silhouette works far better than a wide scene, since each character replaces a whole block of pixels.
- Raise the contrast. Use the filters tool beforehand. This is the single biggest factor in legibility.
- Upload and convert. The image is sampled and mapped to characters.
- Adjust the output width. More columns means more detail but a wider block; fewer means a chunkier, more abstract result.
- Copy as text or save as an image. Text for terminals, code and chat; an image when you need it to render anywhere regardless of font.
If you paste the text somewhere and it looks skewed, the font is proportional rather than
monospace. Wrap it in a pre tag on the web, or use a code block in chat apps, to
force fixed-width rendering.
Frequently asked questions
How does an image become characters?
The image is divided into cells, the average brightness of each is measured, and the character whose visual density best matches is substituted. Dark areas get heavy characters like @ and #, light areas get sparse ones like periods and spaces.
Why does my ASCII art look like noise?
Almost always low contrast. The character ramp is coarse, so a flat image maps most cells to the same few characters. Raising contrast before converting fixes it more than any other change.
Why does it look skewed when I paste it?
The font is proportional rather than monospace, so the columns no longer align. Use a
pre tag, a code block, or any fixed-width font.
Which images work best?
Tightly cropped faces, logos and strong silhouettes. Each character covers a whole block of pixels, so fine detail in a wide scene simply disappears.
Should I save as text or as an image?
Text for terminals, code comments, README files and chat. An image when it needs to display correctly regardless of the viewer's font.
Are my images uploaded?
No. The conversion runs in your browser.
🔎 Verify it yourself: nothing uploads
Don’t take our word for it. Open your browser’s DevTools (F12 → Network tab), then run this tool on any image. You’ll see no upload request at all — your file never leaves this tab. You can even turn off Wi‑Fi once the page has loaded and keep working. Every tool on this site works the same way — all processing happens on your device.