使用 Java 将多个图像转换为灰度

Convert Multiple Images to Grayscale using Java

我的程序正在读取所有文件,但将最后一个文件转换为 b/w,并将文件夹中的所有现有图像更改为转换后的图像。我该怎么办?

//read-image
    try{
      f=new File("path");
      File[] files=f.listFiles();
      for (File file:files){
          ImageInputStream is = ImageIO.createImageInputStream(file);
          img= ImageIO.read(is);
        }
      System.out.println("Reading Complete.");
    }
      catch(IOException e){
        System.out.println("Error"+e);
      }

            //write-image
      try{
        f= new File("path");
        File[] files=f.listFiles();
      for (File file:files){
        ImageOutputStream os = ImageIO.createImageOutputStream(file);
        ImageIO.write(img,"jpeg",os);
        System.out.println("Writing Complete");
        os.flush();
        os.close();
    }
      }
      catch(IOException e){
        System.out.println("Error"+e);
      }

您的代码读取所有文件,但只保留一个 img 对象(最后一个)。你可以通过合并它的两个部分来解决这个问题——读、编辑和写:

try {
    f = new File("path");
    File[] files = f.listFiles();
    for (File file : files){
        Image img;
        try (ImageInputStream is = ImageIO.createImageInputStream(file)) {
            img = ImageIO.read(is);
        }
        Image imgGrayscale = makeImageGrayscale(img);
        try (ImageOutputStream os = ImageIO.createImageOutputStream(file)) {
            ImageIO.write(img, "jpeg", os);
        }
    }
} catch(IOException e){
    System.out.println("Error"+e);
}