ASCII Art Generator

ASCII Art Generator is a lightweight image to ASCII art converter, without reducing image resolution.


The Joker - Batman’s greatest adversary

(Image copyright:

Original input:


Joker-3 Joker-4

And the eternal embodiment of gorgeousness, Scarlett Johanssen :heart:

Original input:


Scarlett-3 Scarlett-3 Scarlett-3

How Does It Work?

ASCII Art Generator works in three steps:

In the RGB colour model, every pixel in an image is represented by combining red, green and blue colours. The average RGB colour of the pixel is calculated as:

int avgColor = (pixel[i][j].red + pixel[i][j].green + pixel[i][j].blue) / 3;

Then the brightness of the pixel is determined. A brigher pixel will be less darker and vice versa. Hence, characters like ', ", /, etc. represent the brightest shades while characters like @, #, $, etc. represent the darkest ones. The entire ASCII pixel set this program uses is as shown (ASCII pixels are ordered as per their increasing brightness):

'@', '#', '9', '8', '&', '6', '5', '4', '0', '3', '7', '?', 'o', '>', '<', '2', ']', '[', '\\', '/', '1', '!', ';', ':', '+', '*', '~', '-', '\'', '"', '\'', ',', '.', ' '

Now, the higher the value of avgColor, more the chances that the pixel is bright and will be represented by a ASCII pixel nearer the end of the ASCII pixel set. So, the brightness is determined in the next step as:

int brightness = avgColor / (Max. brightness value / Max. brightness value available);

In RBG color model, the maximum brightness possible is 255, i.e., the maximum possible red, green or blue value. And in our ASCII pixel set, we have 34 pixels. Hence, maximum brightness value available is 34.

Now the corresponding ASCII pixel for pixel[i][j] is given by ASCII_pixel[brightness].

NOTE : The above code lines just represent how the logic works. In ASCII Art Generator’s source, the actual code do do this is different.

Source, Building & Running

You can find ASCII Art Generator’s source here.

Build & run:

$ g++ main.cpp -std=c++11 -lsfml-graphics -lsfml-system -o ascii-art-gen && ./ascii-art-gen