X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbe%2Fnikiroo%2Futils%2Fmain%2Fimg2aa.java;fp=src%2Fbe%2Fnikiroo%2Futils%2Fmain%2Fimg2aa.java;h=9cc6f0c6e3afcd37bd8508150cfb0a6734670a8c;hb=d46b7b96f94e88a776bcd2dfd756549ffb300cc9;hp=0000000000000000000000000000000000000000;hpb=c9994f27667bc421bcd448d39e55774fddf5c431;p=fanfix.git diff --git a/src/be/nikiroo/utils/main/img2aa.java b/src/be/nikiroo/utils/main/img2aa.java new file mode 100644 index 0000000..9cc6f0c --- /dev/null +++ b/src/be/nikiroo/utils/main/img2aa.java @@ -0,0 +1,137 @@ +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); + } + } +}