package be.nikiroo.utils.main; import java.awt.Dimension; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import be.nikiroo.utils.IOUtils; import be.nikiroo.utils.Image; import be.nikiroo.utils.ui.ImageTextAwt; import be.nikiroo.utils.ui.ImageTextAwt.Mode; import be.nikiroo.utils.ui.ImageUtilsAwt; /** * Image to ASCII conversion. * * @author niki */ public class img2aa { /** * Syntax: (--mode=MODE) (--width=WIDTH) (--height=HEIGHT) (--size=SIZE) * (--output=OUTPUT) (--invert) (--help) *

* See "--help". * * @param args */ public static void main(String[] args) { Dimension size = null; Mode mode = null; boolean invert = false; List inputs = new ArrayList(); File output = null; String lastArg = ""; try { int height = -1; int width = -1; for (String arg : args) { lastArg = arg; if (arg.startsWith("--mode=")) { mode = Mode.valueOf(arg.substring("--mode=".length())); } else if (arg.startsWith("--width=")) { width = Integer .parseInt(arg.substring("--width=".length())); } else if (arg.startsWith("--height=")) { height = Integer.parseInt(arg.substring("--height=" .length())); } else if (arg.startsWith("--size=")) { String content = arg.substring("--size=".length()).replace( "X", "x"); width = Integer.parseInt(content.split("x")[0]); height = Integer.parseInt(content.split("x")[1]); } else if (arg.startsWith("--ouput=")) { if (!arg.equals("--output=-")) { output = new File(arg.substring("--output=".length())); } } else if (arg.equals("--invert")) { invert = true; } else if (arg.equals("--help")) { System.out .println("Syntax: (--mode=MODE) (--width=WIDTH) (--height=HEIGHT) (--size=SIZE) (--output=OUTPUT) (--invert) (--help)"); System.out.println("\t --help: will show this screen"); System.out .println("\t --invert: will invert the 'colours'"); System.out .println("\t --mode: will select the rendering mode (default: ASCII):"); System.out .println("\t\t ASCII: ASCI output mode, that is, characters \" .-+=o8#\""); System.out .println("\t\t DITHERING: Use 5 different \"colours\" which are actually" + "\n\t\t Unicode characters \" ░▒▓█\""); System.out .println("\t\t DOUBLE_RESOLUTION: Use \"block\" Unicode characters up to quarter" + "\n\t\t blocks, thus in effect doubling the resolution both in vertical" + "\n\t\t and horizontal space." + "\n\t\t Note that since 2 characters next to each other are square," + "\n\t\t 4 blocks per 2 blocks for w/h resolution."); System.out .println("\t\t DOUBLE_DITHERING: Use characters from both DOUBLE_RESOLUTION" + "\n\t\t and DITHERING"); return; } else { inputs.add(arg); } } size = new Dimension(width, height); if (inputs.size() == 0) { inputs.add("-"); // by default, stdin } } catch (Exception e) { System.err.println("Syntax error: \"" + lastArg + "\" is invalid"); System.exit(1); } try { if (mode == null) { mode = Mode.ASCII; } for (String input : inputs) { InputStream in = null; try { if (input.equals("-")) { in = System.in; } else { in = new FileInputStream(input); } BufferedImage image = ImageUtilsAwt .fromImage(new Image(in)); ImageTextAwt img = new ImageTextAwt(image, size, mode, invert); if (output == null) { System.out.println(img.getText()); } else { IOUtils.writeSmallFile(output, img.getText()); } } finally { if (!input.equals("-")) { in.close(); } } } } catch (IOException e) { e.printStackTrace(); System.exit(2); } } }