ASCII Art Generator

Turn any image into ASCII text art. Choose the width in characters, the character set, contrast and aspect correction, then copy it or save it as .txt, colour HTML or an image.

Generator Media & Files Updated Oct 4, 2026
How to Use
  1. Drop an image on the box, click to browse, or paste one. A sample picture is converted as soon as the page opens, so you can try every setting first.
  2. Choose Mono text for plain characters or Colour HTML to keep each cell’s colour.
  3. Set the width in characters (20 to 400) and pick a character set: 10-level detailed, 70-level dense, simple, blocks, binary or your own ramp.
  4. Adjust contrast and brightness, tick Invert for light text on a dark background, and keep the character aspect at 0.5 unless your font is unusually wide.
  5. Copy the text, download it as .txt or .html, or save it as a PNG (or any other image format) from the Save panel. Show Work explains how one cell of your picture became its character.
Image & Settings
characters (20–400)
width ÷ height
120%
0
Presets
ASCII Output
Grid
—
Characters
—
Levels
—
Output Size
—
Save the art as an image

Worked Example

An 800×600 photo at 80 columns. Each character covers 800 ÷ 80 = 10 pixels of width. With the standard character aspect of 0.5 a cell is 10 ÷ 0.5 = 20 pixels tall, so the art has 600 ÷ 20 = 30 rows: 80 × 30 = 2,400 characters.

One cell. A cell averaging RGB (200, 120, 40), an orange, has luminance Y = 0.299 × 200 + 0.587 × 120 + 0.114 × 40 = 134.8, or 0.529 of full brightness. On the 10-level detailed ramp @%#*+=-:. that is position 0.529 × 9 = 4.76, which rounds to 5: the character =.

Contrast. At 150% contrast a cell at 0.30 brightness moves to (0.30 − 0.5) × 1.5 + 0.5 = 0.20, position 1.8 → # instead of position 2.7 → *. Dark areas get darker, so the subject separates from the background.

The common mistake: no aspect correction. Using one row per 10 pixels of height gives 60 rows instead of 30, and the picture comes out twice as tall as it should when shown in a monospace font. Keep the aspect at 0.5 (or 0.55 to 0.6 for wide fonts).

Show Work

Load an image to see how one of its cells becomes a character.

Formulas

Rows
rows = round(cols × H ÷ W × a)
a = character width ÷ height, usually 0.5
Luminance
Y = 0.299R + 0.587G + 0.114B
ITU-R BT.601 weights: green counts most
Contrast & brightness
b′ = (b − 0.5) × k + 0.5 + β
k = contrast ÷ 100, β = brightness ÷ 100, clamped to 0–1
Character
i = round(b′ × (L − 1))
L characters in the ramp, darkest first; invert uses 1 − b′

A Short History of Text Art

Pictures made of characters are older than computers. Typists drew with the keys of a typewriter in the late 19th century, and a butterfly typed by Flora Stacey was published in 1898. The ASCII character set itself was standardised in 1963.

In 1966 Kenneth Knowlton and Leon Harmon at Bell Labs scanned a photograph and printed it as a grid of small symbols chosen by brightness, the method this tool still uses. Brightness ramps of 10 and 70 characters, ordered from dense to sparse, were later popularised by the graphics researcher Paul Bourke, and libraries such as AAlib (1997) put live ASCII video in a text terminal. The luminance weights come from ITU-R BT.601, the 1982 standard for digital television.

About This Tool

This generator samples your image on a grid that matches the shape of a monospace character, converts each cell’s brightness to a character from one of six ramps (including your own), and can keep each cell’s colour as HTML. It saves the result as plain text, as a self-contained .html file, or as a picture in any format the site’s image engine writes.

Images are decoded in your browser by the same engine as the Universal Image Converter, so TIFF, PSD, TGA, PCX and camera RAW files work as well as PNG and JPEG. Nothing is uploaded.

Related tools: Universal Image Converter, Image Dither, and Unicode Lab.

Frequently Asked Questions

How does an image become ASCII characters?

The picture is shrunk to a grid with one cell per character and each cell’s brightness is measured with Y = 0.299R + 0.587G + 0.114B. A dark cell gets a dense character such as @ and a light cell a sparse one such as a dot or a space. A cell averaging RGB (200, 120, 40) has Y = 134.8 of 255, which is position 5 of 10 on the detailed ramp: the character =.

Why does ASCII art look stretched, and how is it corrected?

A monospace character is about twice as tall as it is wide, so the generator uses half as many rows as a square grid would need. An 800×600 picture at 80 columns has 10-pixel-wide cells that are 20 pixels tall, giving 30 rows rather than 60. If your font is wider, set the character aspect to 0.55 or 0.6.

Which character set should I use?

The 10-level detailed ramp (@%#*+=-:. ) is the clearest at 80 to 120 columns. The 70-level dense ramp shows finer shading in large art of 150 columns or more. Blocks (█▓▒░) give bold poster shapes, binary gives a 1/0 look, and a custom ramp lets you use any characters, listed from darkest to lightest.

What does Colour HTML do?

It keeps the average colour of every cell and writes each character inside a coloured span. Runs of the same colour share one span, and colours are rounded to 4 bits per channel (#rgb), which keeps a 100-column picture to tens of kilobytes. Paste the .html file into a page or open it in a browser.

Is my image uploaded?

No. The image is decoded and read pixel by pixel in your browser, including formats a browser cannot normally open such as TIFF, PSD, TGA and PCX. Nothing is sent to a server.

How do I use the ASCII Art Generator?

Just pick your options. The answer shows up right away — there is no button to press. Change anything and it updates by itself.

Does it cost anything or need an account?

No. The tool is completely free, there is no account to create, and it keeps working offline after the page first loads.

Is anything I type uploaded?

No. The tool works entirely on your device, so the values you enter never leave your browser.

Common Use Cases

README and terminal banners

A logo at 60 columns with the simple ramp gives about 15 to 25 lines of text that drop straight into a README, a login message or a CLI splash screen.

Email and forum signatures

Plain-text art survives where images are stripped. Keep it under 72 columns so it does not wrap in mail clients.

Colour HTML art for a web page

A 120-column colour portrait renders as live text: it scales with the font size and can be selected and copied.

Code comments and chat

Paste a 40-column sketch of a diagram or logo into a source file header or a chat that only accepts text.

Teaching sampling and brightness

Show Work traces one cell from its RGB values through the luminance formula to its character, a hands-on view of how pixels become data.

Last updated: