Simple Java Program to make ASCII “image” out of given image.

Output

Voronoi Diagram 100x100px 5 points
Voronoi Diagram 100x100px 5 points
Voronoi Diagram AS ASCII Image

Works best in new browser tab/window (move mouse on text below and select little ‘+’ in right top corner).

...........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&
...........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&
...........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&
...........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&
...........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&
...........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&
...........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&
..........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&
..........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&
..........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&
..........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&
..........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&
..........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&
..........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&
..........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&
.........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&
.........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&
.........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&
.........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&
.........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&
.........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&
.........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&
.........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&
........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
........................................................................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
....................................@@@@@@@@@@..........................&&&&&&&&&&&&&&&&&&&&&&&&&&&&
....................................@@@@@@@@@@.........................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
....................................@@@@@@@@@@.........................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
....................................@@@@@@@@@@.........................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
....................................@@@@@@@@@@.........................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
....................................@@@@@@@@@@.........................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
....................................@@@@@@@@@@.........................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
....................................@@@@@@@@@@.........................&&&&&&&&&&&&&&&&&&&&&&&@@@@@@
....................................@@@@@@@@@@.........................&&&&&&&&&&&&&&&&&&&&&&&@@@@@@
....................................@@@@@@@@@@........................*&&&&&&&&&&&&&&&&&&&&&&&@@@@@@
....................................................................***&&&&&&&&&&&&&&&&&&&&&&&@@@@@@
..................................................................******&&&&&&&&&&&&&&&&&&&&&&@@@@@@
.................................................................********&&&&&&&&&&&&&&&&&&&&&@@@@@@
...............................................................**********&&&&&&&&&&&&&&&&&&&&&@@@@@@
..............................................................************&&&&&&&&&&&&&&&&&&&&@@@@@@
............................................................**************8&&&&&&&&&&&&&&&&&&&@@@@@@
..........................................................****************8888&&&&&&&&&&&&&&&&@@@@@@
.........................................................*****************888888&&&&&&&&&&&&&&&&&&&&
.......................................................*******************888888888&&&&&&&&&&&&&&&&&
.....................................................*********************88888888888&&&&&&&&&&&&&&&
....................................................***********************8888888888888&&&&&&&&&&&&
..................................................*************************888888888888888&&&&&&&&&&
.................................................**************************888888888888888888&&&&&&&
...............................................****************************88888888888888888888&&&&&
.............................................******************************8888888888888888888888&&&
............................................*******************************8888888888888888888888888
..........................................*********************************8888888888888888888888888
........................................***********************************8888888888888888888888888
.......................................************************************8888888888888888888888888
.....................................**************************************8888888888@@@@@@@@@@88888
...................................****************************************8888888888@@@@@@@@@@88888
..................................*********************@@@@@@@@@@**********8888888888@@@@@@@@@@88888
................................***********************@@@@@@@@@@**********8888888888@@@@@@@@@@88888
...............................************************@@@@@@@@@@**********8888888888@@@@@@@@@@88888
.............................**************************@@@@@@@@@@**********8888888888@@@@@@@@@@88888
...........................****************************@@@@@@@@@@***********888888888@@@@@@@@@@88888
..........................*****************************@@@@@@@@@@***********888888888@@@@@@@@@@88888
........................*******************************@@@@@@@@@@***********888888888@@@@@@@@@@88888
......................*********************************@@@@@@@@@@***********888888888@@@@@@@@@@88888
.....................**********************************@@@@@@@@@@***********888888888888888888888888
...................************************************@@@@@@@@@@***********888888888888888888888888
..................**********************************************************888888888888888888888888
................************************************************************888888888888888888888888
..............**************************************************************888888888888888888888888
.............***************************************************************888888888888888888888888
...........************************************************************/////888888888888888888888888
.........*******************************************/////////////////////////88888888888888888888888
........*************************/////////////////////////////////////////////8888888888888888888888
......********/////////////////////////////////////////////////////////////////888888888888888888888
....///////////////////////////////////////////////////////////////////////////888888888888888888888
..//////////////////////////////////////////////////////@@@@@@@@@@//////////////88888888888888888888
////////////////////////////////////////////////////////@@@@@@@@@@///////////////8888888888888888888
////////////////////////////////////////////////////////@@@@@@@@@@///////////////8888888888888888888
////////////////////////////////////////////////////////@@@@@@@@@@////////////////888888888888888888
////////////////////////////////////////////////////////@@@@@@@@@@/////////////////88888888888888888
////////////////////////////////////////////////////////@@@@@@@@@@//////////////////8888888888888888
////////////////////////////////////////////////////////@@@@@@@@@@//////////////////8888888888888888
////////////////////////////////////////////////////////@@@@@@@@@@///////////////////888888888888888
////////////////////////////////////////////////////////@@@@@@@@@@////////////////////88888888888888
////////////////////////////////////////////////////////@@@@@@@@@@////////////////////88888888888888
///////////////////////////////////////////////////////////////////////////////////////8888888888888
////////////////////////////////////////////////////////////////////////////////////////888888888888
/////////////////////////////////////////////////////////////////////////////////////////88888888888
/////////////////////////////////////////////////////////////////////////////////////////88888888888
//////////////////////////////////////////////////////////////////////////////////////////8888888888
///////////////////////////////////////////////////////////////////////////////////////////888888888
////////////////////////////////////////////////////////////////////////////////////////////88888888
////////////////////////////////////////////////////////////////////////////////////////////88888888
/////////////////////////////////////////////////////////////////////////////////////////////8888888

Main.java

import javax.imageio.ImageIO;
import java.io.*;

// 2018 TheFlyingKeyboard and released under MIT License
// theflyingkeyboard.net
public class Main {
    public static void main(String[] args) {
        ImageToASCII imageToASCII = new ImageToASCII(1);

        try {
            String[] asciiImage = imageToASCII.convert(ImageIO.read(new File("voronoi.png")));

            try {
                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("ImageInASCII.txt"));
                PrintWriter printWriter = new PrintWriter(bufferedWriter);

                for (int i = 0; i < asciiImage.length; i++) {
                    if (asciiImage[i] != null) {
                        printWriter.write(asciiImage[i]);
                    }

                    printWriter.write("\n");
                }

                printWriter.close();
            } catch (IOException e) {
                System.out.println(e);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ImageToASCII.java

import java.awt.*;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;

// 2018 TheFlyingKeyboard and released under MIT License
// theflyingkeyboard.net
public class ImageToASCII {
    private final int pixelsPerChar;

    public ImageToASCII(int pixelsPerChar) {
        this.pixelsPerChar = pixelsPerChar;
    }

    public String[] convert(BufferedImage bufferedImage) {
        StringBuilder[] imageInASCII = new StringBuilder[bufferedImage.getHeight() / pixelsPerChar];

        for (int i = 0; i < imageInASCII.length; ++i) {
            imageInASCII[i] = new StringBuilder();
        }

        //Converts to greyscale.
        ColorSpace colorSpace = ColorSpace.getInstance(ColorSpace.CS_GRAY);
        ColorConvertOp colorConvertOp = new ColorConvertOp(colorSpace, null);
        bufferedImage = colorConvertOp.filter(bufferedImage, null);

        //Gets mean color of each of squares.
        int meanColor;
        Color color;
        for (int y = 0; y < bufferedImage.getHeight(); y += pixelsPerChar) {
            for (int x = 0; x < bufferedImage.getWidth(); x += pixelsPerChar) {
                if (y + pixelsPerChar <= bufferedImage.getHeight() && x + pixelsPerChar <= bufferedImage.getWidth()) {
                    meanColor = 0;

                    if (pixelsPerChar == 1) {
                        color = new Color(bufferedImage.getRGB(x, y));
                        meanColor += color.getBlue(); //Could be also green or red, they all are the same, because the image is in greyscale.
                    } else {
                        for (int square = 0; square < pixelsPerChar; ++square) {
                            color = new Color(bufferedImage.getRGB(x, y + square));
                            meanColor += color.getBlue();

                            color = new Color(bufferedImage.getRGB(x + square, y));
                            meanColor += color.getBlue();
                        }

                        meanColor /= pixelsPerChar;
                    }


                    imageInASCII[y / pixelsPerChar].append(colorToChar(meanColor));
                }
            }
        }

        String[] asciiImage = new String[bufferedImage.getHeight() / pixelsPerChar];

        for (int i = 0; i < asciiImage.length; ++i) {
            asciiImage[i] = imageInASCII[i].toString();
        }

        return asciiImage;
    }

    private char colorToChar(int color) {
        if (color < 25) {
            return '@';
        } else if (color >= 25 && color < 51) {
            return '#';
        } else if (color >= 51 && color < 76) {
            return '8';
        } else if (color >= 76 && color < 102) {
            return '&';
        } else if (color >= 102 && color < 127) {
            return 'o';
        } else if (color >= 127 && color < 153) {
            return '*';
        } else if (color >= 153 && color < 178) {
            return '/';
        } else if (color >= 178 && color < 204) {
            return '\'';
        } else if (color >= 204 && color < 229) {
            return '.';
        }

        return ' ';
    }
}

Note that it works best if width and height of image is divisible by pixelsPerChar.



Java Image To ASCII
Tagged on:             

Leave a Reply

Your email address will not be published. Required fields are marked *

By continuing to use the site, you agree to the use of cookies. You can read more about it the Cookies&Privacy Policy Section Above. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this. You can read more about it the Cookies&Privacy Policy Section.

Close