ascii_art
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
ascii_art [2023/03/25 15:34] – [Step 4. Convert brightness numbers to ASCII characters] frchris | ascii_art [2023/03/27 10:46] (current) – frchris | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== ASCII Art ====== | ====== ASCII Art ====== | ||
+ | [[https:// | ||
< | < | ||
Line 38: | Line 39: | ||
==== Step 0. Choose an image ==== | ==== Step 0. Choose an image ==== | ||
- | Choose the first image that you want to convert into ASCII art. It’s good to start with an image around 640x480. | + | Choose the first image that you want to convert into ASCII art. It’s good to start with an image around 640x480 |
+ | |||
+ | Light pixels will be represented by small characters like a dot (.), which leave lots of the background exposed. On the other extreme, dense characters like $ are used to cover up the background. | ||
<code PickPicture.java> | <code PickPicture.java> | ||
import java.awt.Color; | import java.awt.Color; | ||
Line 152: | Line 156: | ||
==== Step 2. Load your image’s pixel data into a 2-dimensional array ==== | ==== Step 2. Load your image’s pixel data into a 2-dimensional array ==== | ||
<code Step2.java> | <code Step2.java> | ||
+ | |||
import java.awt.image.BufferedImage; | import java.awt.image.BufferedImage; | ||
import java.io.File; | import java.io.File; | ||
import java.io.IOException; | import java.io.IOException; | ||
import javax.imageio.ImageIO; | import javax.imageio.ImageIO; | ||
+ | /** | ||
+ | * Start Step2 with this code. | ||
+ | * The image will return a single line of ints that represent color | ||
+ | * and you need to make a 2D Array of Color from it. | ||
+ | * | ||
+ | * @author Chris Thiel, OFMCap | ||
+ | * @version 25 Mar 2023 | ||
+ | */ | ||
public class Step2 | public class Step2 | ||
{ | { | ||
Line 296: | Line 308: | ||
} | } | ||
+ | public int[][] getBrightness() | ||
+ | { | ||
+ | return brightness; | ||
+ | } | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
- | Step3 pic= new Step3(" | + | Step3 pic= new Step3(" |
- | JFrame window = new JFrame(" | + | JFrame window = new JFrame(" |
window.setSize(pic.getWidth(), | window.setSize(pic.getWidth(), | ||
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
Line 309: | Line 324: | ||
</ | </ | ||
==== Step 4. Convert brightness numbers to ASCII characters | ==== Step 4. Convert brightness numbers to ASCII characters | ||
- | You can experiment with different ways to map brightnesses to characters, but a good place to start is the string | + | You can experiment with different ways to map brightnesses to characters, but a good place to start is the string |
+ | |||
+ | <code Step4.java> | ||
+ | import java.awt.Color; | ||
+ | import java.awt.Font; | ||
+ | import java.awt.Graphics; | ||
+ | import javax.swing.JFrame; | ||
+ | import javax.swing.JPanel; | ||
+ | import java.awt.*; | ||
+ | import java.nio.file.Files; | ||
+ | import java.io.IOException; | ||
+ | import java.nio.file.Paths; | ||
+ | |||
+ | /** | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | public class Step4 | ||
+ | { | ||
+ | |||
+ | private String fileName; | ||
+ | private Font titleFont, regularFont; | ||
+ | |||
+ | private int[][] brightness; | ||
+ | private char[][] ascii; | ||
+ | |||
+ | |||
+ | public Step4(String fileName) | ||
+ | { | ||
+ | |||
+ | this.fileName = fileName; | ||
+ | this.brightness = new Step3(fileName).getBrightness(); | ||
+ | titleFont = new Font(" | ||
+ | regularFont = new Font(" | ||
+ | //Make a 2D int array that matched the dimentions of the Brightness array | ||
+ | |||
+ | ascii = new char[brightness.length][brightness[0].length]; | ||
+ | |||
+ | //Fill the asciii array with your choice of conversion method | ||
+ | |||
+ | // your code here | ||
+ | |||
+ | } | ||
+ | /** | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | public char asciiChar( int lightValue) | ||
+ | { | ||
+ | String chars = ""; | ||
+ | int max = chars.length(); | ||
+ | // your code here | ||
+ | } | ||
+ | public int getWidth() { | ||
+ | return brightness.length;// | ||
+ | } | ||
+ | |||
+ | public int getHeight() { | ||
+ | return brightness[0].length; | ||
+ | } | ||
+ | /** | ||
+ | * The ascii array is constructed with a newline " | ||
+ | */ | ||
+ | public String toString(){ | ||
+ | // your code here | ||
+ | } | ||
+ | public void writeToFile() | ||
+ | { | ||
+ | String name = fileName.substring(0, | ||
+ | try { | ||
+ | | ||
+ | } catch (IOException e){ | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | public static void main(String[] args) { | ||
+ | System.out.println(" | ||
+ | Step4 pic= new Step4(" | ||
+ | System.out.println(pic); | ||
+ | pic.writeToFile(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | ==== Step 5. What if it looks your image looks stretched or too big ==== | ||
+ | Characters tend to be three times taller than wide, so you could replace each character with three. If that is too large, you could make one character represent the average of three columns. | ||
- | ==== Step 5. What if it looks your image looks squashed? | + | ==== Here are some examples |
+ | - {{ ::fry.txt |}} | ||
+ | - {{ :: | ||
+ | ==== See more from Robert Heaton Here ==== | ||
[[https:// | [[https:// |
ascii_art.1679772885.txt.gz · Last modified: 2023/03/25 15:34 by frchris