import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;

public class ImageIOTest {    

    public static void main( String[] args ){
       BufferedImage img1 = null;  // buffer type 
       BufferedImage img2 = null;  // buffer type 
       BufferedImage img3 = null;  // buffer type 
        try {
            // Name of file and directories
            String ML = "MonaLisa";
            String monkey = "monkey";
            String pumpkin = "pumpkin";

            // Either use URL or File for reading image using ImageIO
            File imageFile1 = new File("images/" + ML + ".png");
            File imageFile2 = new File("images/" + monkey + ".png");
            File imageFile3 = new File("images/" + pumpkin + ".png");

            img1 = ImageIO.read(imageFile1);  // set buffer of image data
            img2 = ImageIO.read(imageFile2);  // set buffer of image data
            img3 = ImageIO.read(imageFile3);  // set buffer of image data

            // ImageIO Image write to gif in Java
            // Documentation https://docs.oracle.com/javase/tutorial/2d/images/index.html
            ImageIO.write(img1, "gif", new File("images/tmp/MonaLisa/" + ML + ".gif") );  // write buffer to gif
            ImageIO.write(img2, "gif", new File("images/tmp/Monkey/" + monkey + ".gif") );  // write buffer to gif
            ImageIO.write(img2, "jpg", new File("images/tmp/Monkey/" + monkey + ".jpg") );  // write buffer to gif
            ImageIO.write(img3, "gif", new File("images/tmp/Pumpkin/" + pumpkin + ".gif") );  // write buffer to gif

        } catch (IOException e) {
              e.printStackTrace();
        }
        System.out.println("Success");
    }
}
ImageIOTest.main(null);
Success
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.awt.Graphics2D;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.ImageReader;
import javax.imageio.ImageTypeSpecifier;
public class Pics {
    private final String inDir = "images/"; // location of images
    private final String outDir = "images/tmp/";  // location of created files
    private String inFile;
    private String resizedFile;
    private String asciiFile;
    private String grayscaleFile;
    private String redscaleFile;
    private String bluescaleFile;
    private String greenscaleFile;
    private String ext;   // extension of file
    private long bytes;
    private int width;
    private int height;
    // Constructor obtains attributes of picture
    public Pics(String name, String path, String ext) {
        this.ext = ext;
        this.inFile = this.inDir + name + "." + ext;
        this.resizedFile = this.outDir + path + name + "." + ext;
        this.asciiFile = this.outDir + path + name + ".txt";
        this.grayscaleFile = this.outDir + path + name + "gray." + ext;
        this.redscaleFile = this.outDir + path + name + "red." + ext;
        this.bluescaleFile = this.outDir + path + name + "blue." + ext;
        this.greenscaleFile = this.outDir + path + name + "green." + ext;
        this.setStats();
    }
    // An image contains metadata, namely size, width, and height
    public void setStats() {
        BufferedImage img;
        try {
            Path path = Paths.get(this.inFile);
            this.bytes = Files.size(path);
            img = ImageIO.read(new File(this.inFile));
            this.width = img.getWidth();
            this.height = img.getHeight();
        } catch (IOException e) {
        }
    }
    // Console print of data
    public void printStats(String msg) {
        System.out.println(msg + ": " + this.bytes + " " + this.width + "x" + this.height + "  " + this.inFile);
    }
    // Convert scaled image into buffered image
    public static BufferedImage convertToBufferedImage(Image img) {
        // Create a buffered image with transparency
        BufferedImage bi = new BufferedImage(
                img.getWidth(null), img.getHeight(null),
                BufferedImage.TYPE_INT_ARGB);
        // magic?
        Graphics2D graphics2D = bi.createGraphics();
        graphics2D.drawImage(img, 0, 0, null);
        graphics2D.dispose();
        return bi;
    }
    // Scale or reduce to "scale" percentage provided
    public void resize(int scale) {
        BufferedImage img = null;
        Image resizedImg = null;
        int width = (int) (this.width * (scale/100.0) + 0.5);
        int height = (int) (this.height * (scale/100.0) + 0.5);
        try {
            // read an image to BufferedImage for processing
            img = ImageIO.read(new File(this.inFile));  // set buffer of image data
            // create a new BufferedImage for drawing
            resizedImg = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
        } catch (IOException e) {
            return;
        }
        try {
            ImageIO.write(convertToBufferedImage(resizedImg), this.ext, new File(resizedFile));
        } catch (IOException e) {
            return;
        }
        this.inFile = this.resizedFile;  // use scaled file vs original file in Class
        this.setStats();
    }
    // convert every pixel to an ascii character (ratio does not seem correct)
    public void convertToAscii() {
        BufferedImage img = null;
        PrintWriter asciiPrt = null;
        FileWriter asciiWrt = null;
        try {
            File file = new File(this.asciiFile);
            Files.deleteIfExists(file.toPath());
        } catch (IOException e) {
            System.out.println("Delete File error: " + e);
        }
        try {
            asciiPrt = new PrintWriter(asciiWrt = new FileWriter(this.asciiFile, true));
        } catch (IOException e) {
            System.out.println("ASCII out file create error: " + e);
        }
        try {
            img = ImageIO.read(new File(this.inFile));
        } catch (IOException e) {
        }
        for (int i = 0; i < img.getHeight(); i+=3) {
            for (int j = 0; j < img.getWidth(); j++) {
                Color col = new Color(img.getRGB(j, i));
                double pixVal = (((col.getRed() * 0.30) + (col.getBlue() * 0.59) + (col
                        .getGreen() * 0.11)));
                try {
                    asciiPrt.print(asciiChar(pixVal));
                    asciiPrt.flush();
                    asciiWrt.flush();
                } catch (Exception ex) {
                }
            }
            try {
                asciiPrt.println("");
                asciiPrt.flush();
                asciiWrt.flush();
            } catch (Exception ex) {
            }
        }
    }
    public void grayScale() {
        
   BufferedImage image;
   int width;
   int height;
      
      try {
        setStats();
         File input = new File(this.inFile);
         image = ImageIO.read(input);
         width = image.getWidth();
         height = image.getHeight();
         
         for(int i=0; i<height; i++) {
         
            for(int j=0; j<width; j++) {
            
               Color c = new Color(image.getRGB(j, i));
               int red = (int)(c.getRed() * 0.299);
               int green = (int)(c.getGreen() * 0.587);
               int blue = (int)(c.getBlue() *0.114);
               Color newColor = new Color(red+green+blue,red+green+blue,red+green+blue);
               image.setRGB(j,i,newColor.getRGB());
            }
         }
         
         File output = new File(this.grayscaleFile);
         ImageIO.write(image, "gif", output);
         
      } catch (Exception e) {}
   }

   public void redScale() {
        
    BufferedImage image;
    int width;
    int height;
       
       try {
         setStats();
          File input = new File(this.inFile);
          image = ImageIO.read(input);
          width = image.getWidth();
          height = image.getHeight();
          
          for(int i=0; i<height; i++) {
          
             for(int j=0; j<width; j++) {
             
                Color c = new Color(image.getRGB(j, i));
                int rgb = new Color(c.getRed(), 0, 0).getRGB();
                image.setRGB(j, i, rgb);
             }
          }
          
          File output = new File(this.redscaleFile);
          ImageIO.write(image, "gif", output);
          
       } catch (Exception e) {}
    }

    public void blueScale() {
        
        BufferedImage image;
        int width;
        int height;
           
           try {
             setStats();
              File input = new File(this.inFile);
              image = ImageIO.read(input);
              width = image.getWidth();
              height = image.getHeight();
              
              for(int i=0; i<height; i++) {
              
                 for(int j=0; j<width; j++) {
                 
                    Color c = new Color(image.getRGB(j, i));
                    int rgb = new Color(0, 0, c.getBlue()).getRGB();
                    image.setRGB(j, i, rgb);
                 }
              }
              
              File output = new File(this.bluescaleFile);
              ImageIO.write(image, "gif", output);
              
           } catch (Exception e) {}
        }

        public void greenScale() {
        
            BufferedImage image;
            int width;
            int height;
               
               try {
                 setStats();
                  File input = new File(this.inFile);
                  image = ImageIO.read(input);
                  width = image.getWidth();
                  height = image.getHeight();
                  
                  for(int i=0; i<height; i++) {
                  
                     for(int j=0; j<width; j++) {
                     
                        Color c = new Color(image.getRGB(j, i));
                        int rgb = new Color(0, c.getGreen(), 0).getRGB();
                        image.setRGB(j, i, rgb);
                     }
                  }
                  
                  File output = new File(this.greenscaleFile);
                  ImageIO.write(image, "gif", output);
                  
               } catch (Exception e) {}
            }
   
    // conversion table, there may be better out there ie https://www.billmongan.com/Ursinus-CS173-Fall2020/Labs/ASCIIArt
    public String asciiChar(double g) {
        String str = " ";
        if (g >= 240) {
            str = " ";
        } else if (g >= 210) {
            str = ".";
        } else if (g >= 190) {
            str = "*";
        } else if (g >= 170) {
            str = "+";
        } else if (g >= 120) {
            str = "^";
        } else if (g >= 110) {
            str = "&";
        } else if (g >= 80) {
            str = "8";
        } else if (g >= 60) {
            str = "#";
        } else {
            str = "@";
        }
        return str;
    }
    // tester/driver
    public static void main(String[] args) throws IOException {
        Pics monaLisa = new Pics("MonaLisa", "MonaLisa/", "png");
        monaLisa.printStats("Original");
        monaLisa.grayScale();
        monaLisa.redScale();
        monaLisa.blueScale();
        monaLisa.greenScale();
        monaLisa.resize(33);
        monaLisa.printStats("Scaled");
        monaLisa.convertToAscii();
        Pics pumpkin = new Pics("pumpkin", "Pumpkin/", "png");
        pumpkin.printStats("Original");
        pumpkin.grayScale();
        pumpkin.redScale();
        pumpkin.blueScale();
        pumpkin.greenScale();
        pumpkin.resize(33);
        pumpkin.printStats("Scaled");
        pumpkin.convertToAscii();
        Pics monkey = new Pics("monkey", "Monkey/", "png");
        monkey.printStats("Original");
        monkey.grayScale();
        monkey.redScale();
        monkey.blueScale();
        monkey.greenScale();
        monkey.resize(33);
        monkey.printStats("Scaled");
        monkey.convertToAscii();
    }
}
Pics.main(null);
Original: 499298 389x413  images/MonaLisa.png
Scaled: 55625 128x136  images/tmp/MonaLisa/MonaLisa.png
Original: 39392 302x265  images/pumpkin.png
Scaled: 10497 100x87  images/tmp/Pumpkin/pumpkin.png
Original: 95108 1085x814  images/monkey.png
Scaled: 256684 358x269  images/tmp/Monkey/monkey.png
The Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. View Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details.

Mona Lisa

image image image image image image image

Monkey

image image image image image image image

Pumpkin

image image image image image image image