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

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