Skip to main content
AA

ASCII Art Generator

Turn a photo into text-based ASCII art, or type a short message as a large block-letter banner — both rendered entirely in your browser.

Did you like the tool? Thanks!
Share:

More Image Tools Tools

IC

Image Cropper

Crop any image to exactly the area you need, with a live preview — nothing is uploaded, everything happens in your browser.

IR

Image Resizer

Resize any image to an exact width and height in your browser — optional aspect-ratio lock, PNG/JPEG/WebP output, nothing uploaded.

IC

Image Compressor

Shrink an image's file size by re-encoding it at a chosen quality level — live before/after size comparison, JPEG/WebP/PNG output, done locally.

IF

Image Flip & Rotate

Flip an image horizontally or vertically and rotate it by any angle — quick 90/180/270° buttons or a free-angle slider, corners never clipped.

IT

Image to Base64

Convert an image into a Base64-encoded string — full data URI or raw Base64, character count, one-click copy, all done locally.

BT

Base64 to Image

Paste a Base64 string or data URI and preview the decoded image instantly — auto-trims whitespace, lets you pick the assumed format, download in one click.

PI

Placeholder Image Generator

Generate a simple placeholder image for wireframes and mockups — custom size, colors and text, auto-sized to fit, PNG/JPEG/WebP output.

IF

Image Format Converter

Convert an image between PNG, JPEG, WebP and BMP entirely in your browser — no upload, instant preview, adjustable quality.

FG

Favicon Generator

Turn any image into a complete favicon package — six PNG sizes plus a combined multi-resolution .ico file, generated locally in your browser.

QC

QR Code Generator

Generate a real, scannable QR code from text, a URL, Wi-Fi details, an email address or a phone number — encoded entirely in your browser, no external API.


            

Any character outside that set (accents, most punctuation, emoji) renders as a blank column rather than an error.


        

How to Use ASCII Art Generator

Two modes, switchable at the top: "Image to ASCII" converts an uploaded photo into a grid of characters shaded from dark to light, with a column-count slider from 20 to 200 to control detail. "Text to ASCII Banner" renders a short message as large block letters built from a 5×7 pixel font. Both modes offer a copy button and a download-as-.txt button, and both update live as you adjust any setting.

About ASCII Art Generator

ASCII art — building an image entirely out of ordinary text characters — is one of the oldest tricks in computing for representing pictures in an environment that can only display text, dating back to early printers and terminals that had no way to show a real image at all. The core idea has stayed exactly the same ever since: pick a set of characters ordered from visually "heaviest" (characters like @ or % that use a lot of ink and look dark and dense) to visually "lightest" (a period, or plain empty space, which reads as bright), then, for each small region of a source photo, work out roughly how bright or dark that region is, and print whichever character in the ramp best matches that brightness. Do this once for every cell in a grid laid over the whole image, and the result — viewed as a block of text in a monospace font, where every character occupies the same fixed-width cell — reads as a recognisable, if blocky, likeness of the original picture, purely from character density. The brightness of a region — its luminance — isn't simply the average of its red, green and blue values, because human vision doesn't weight colours evenly: green looks considerably brighter to the eye than red at the same intensity, and blue looks noticeably dimmer than either. This tool uses the standard formula for perceptual luminance, `0.299×red + 0.587×green + 0.114×blue`, which weights green far more heavily than red or blue to match how bright a colour actually looks to a human observer rather than how bright its raw numbers might suggest — a pure, fully-saturated green pixel reads as meaningfully brighter under this formula than an equally saturated blue pixel of the same numeric intensity would, matching how they actually look side by side. A subtlety that trips up nearly every ASCII-art tool built without accounting for it: a text character in a monospace font isn't square — it's roughly twice as tall as it is wide. If you sample one image pixel (or one downscaled block) per output character in both directions equally, the result comes out looking noticeably stretched vertically once it's actually rendered as text, because each character cell covers twice as much vertical image content as horizontal, visually compressing the image top-to-bottom relative to how wide it reads. Correcting for this means sampling roughly two image rows for every one row of output text — effectively downscaling to half the vertical resolution you'd otherwise use for a given column count — so the final block of text reads with the same proportions as the original photo once it's actually displayed in a monospace font, rather than looking squashed or stretched. The text-banner mode solves a related but distinct problem: rendering large, chunky block letters using nothing but plain text characters, the same way a scrolling LED sign or an old dot-matrix printer banner works. Each supported letter and digit is defined as a fixed 5-columns-wide by 7-rows-tall grid of "on" and "off" cells — a tiny bitmap font, hand-built one character at a time — and printing several characters side by side, each one exactly 5 characters wide with a single blank column of spacing in between, builds up a large, chunky, unmistakably block-lettered message wide enough to read clearly even from a screen's worth away.

Details & Tips

How the image mode's pixel sampling actually works: the source image is drawn onto an off-screen canvas that's been resized down to exactly the chosen column count in width, and to a row count computed as `round((imageHeight / imageWidth) × columns × 0.5)` in height — that final `× 0.5` is the aspect-ratio correction described above, sampling at half the vertical resolution the column count alone would otherwise imply. Letting the canvas itself perform this downscale (rather than sampling individual pixels from the full-resolution image one at a time) means each output cell's colour is already a smoothed average of the source region it covers, rather than a single sharp pixel that might not represent its neighbourhood well. Once downscaled, `getImageData()` reads out the exact red, green and blue value of every remaining pixel — one pixel now corresponds to exactly one output character. Each pixel's luminance is computed with the formula above, then mapped to a character using `index = floor((luminance / 255) × (rampLength - 1))` against the fixed 10-character ramp `"@%#*+=-:. "` (from `@`, the densest/darkest character, down to a plain space, the lightest). Concretely: a pure white pixel (255, 255, 255) has luminance 255, giving `floor((255/255) × 9) = floor(9) = 9` — the very last character in the ramp, a space, correctly reading as fully bright/empty. A pure black pixel (0, 0, 0) has luminance 0, giving index 0 — `@`, the densest, darkest character. Every value in between lands somewhere along that same 10-step gradient. Output renders inside a `<pre>` block with a fixed monospace font, `line-height: 1` and no extra letter-spacing, so every row and column lines up into a clean, undistorted grid rather than drifting out of alignment as the text wraps or the browser's default line spacing intervenes. For the text-banner mode, every supported character — the 26 letters, 10 digits, a plain space, and a small set of basic punctuation (period, comma, exclamation mark, question mark, hyphen, colon and apostrophe) — has its own hand-built 5×7 grid, stored as seven strings of five characters each, where a `#` marks a lit cell and a `.` marks an empty one. Typing a character outside that supported set — an accented letter, most other punctuation, an emoji — doesn't error or crash; it simply renders as a fully blank 5-column-wide gap in the banner, keeping the surrounding letters correctly aligned rather than breaking the whole output. Each character in your typed message is looked up, its 7 rows are appended left-to-right onto seven running output lines (one blank column added between each letter for legibility), and the finished seven-line block is joined and displayed exactly as built — since it's inserted using `x-text`/`textContent` rather than `innerHTML` at every step, nothing you type can ever be interpreted as HTML or a script, only ever as literal displayed text. Worked example: the letter 'A' is stored as the seven rows `..#..`, `.#.#.`, `#...#`, `#...#`, `#####`, `#...#`, `#...#` — a peaked apex narrowing to a point at the top, a horizontal crossbar through the middle, and two straight legs down to the base, recognisable as a block capital A even at this coarse 5×7 resolution. Both modes run entirely as JavaScript in your browser; no image or typed text is ever uploaded anywhere, and the copy and download buttons work directly from the text already generated on your screen.

Frequently Asked Questions

How does the tool decide which character to use for each part of the image?
It computes each sampled pixel's perceptual luminance (brightness) using the formula 0.299×red + 0.587×green + 0.114×blue, then maps that value onto a 10-character ramp running from @ (darkest) to a space (lightest) — brighter areas get lighter characters, darker areas get denser ones.
Why does a square photo not come out looking stretched?
A monospace text character is roughly twice as tall as it is wide, so the tool samples about half as many image rows as columns for a given column count — this aspect-ratio correction keeps the final text-rendered image proportioned correctly rather than looking vertically stretched.
What does the columns slider actually control?
It sets how many characters wide the output is, from 20 to 200. More columns capture finer detail but produce a much larger block of text; fewer columns give a coarser, more abstract result that's easier to read at a glance.
What characters are supported in the text banner mode?
Letters A-Z, digits 0-9, a space, and a handful of basic punctuation: period, comma, exclamation mark, question mark, hyphen, colon and apostrophe. Anything else renders as a blank column rather than causing an error.
What happens if I type an unsupported character in the banner?
It renders as an empty 5-column gap in the output rather than crashing or being skipped entirely — the surrounding letters stay correctly aligned, and you'll simply see a wider gap where that character would have been.
Is my image or typed text sent to a server?
No. Both modes run entirely as JavaScript directly in your browser — nothing you upload or type is ever transmitted, logged, or stored anywhere.
Why is a pure white pixel shown as a space rather than a visible character?
A space is deliberately the lightest character in the ramp, representing maximum brightness — a pure white (255,255,255) pixel has the highest possible luminance, so it correctly maps to the emptiest/brightest end of the scale rather than a printed symbol.
Can I copy the result instead of downloading it?
Yes — both modes have a Copy button that copies the exact text currently shown straight to your clipboard, alongside a Download as .txt button for saving it as a file.
Why does the text-banner font look blocky rather than smooth?
Each letter is built from a fixed 5-columns-by-7-rows grid of on/off cells — a genuinely tiny bitmap font, in the same tradition as old LED signs and dot-matrix printer banners, which is inherently blocky rather than smooth at this resolution.
Does the image mode work with any photo format?
Anything your browser can natively display as an image — PNG, JPEG, WebP, GIF and BMP all work. Very detailed or high-contrast photos tend to produce the most recognisable ASCII results.
Is there a limit on how long the banner text can be?
The input is capped at 24 characters, since block-letter banners get very wide very quickly — for a longer message, consider generating it in a few shorter pieces.

Part of These Collections

Also Available As

ascii art generator, image to ascii, text to ascii art, ascii banner generator, ascii art converter online

Found a Problem?

Let us know if something with ASCII Art Generator isn't working as expected.

Thanks — we'll take a look.