Wie kann ein BufferedImage in eine Datei gespeichert werden?

Eine Bilddatei lässt sich durch die Klasse ImageIO sowohl lesen als auch schreiben, sodass ein BufferedImage durch die Methode ImageIO.write() in eine Datei gespeichert werden kann.

Im Beispiel wird eine JPG-Datei eingelesen, in ein BufferedImage konvertiert und als*.png im Dateisystem wieder abgespeichert.
Die Methode createBI() lädt eine JPG-Datei aus dem Dateisystem durch die Methode read() der Klasse javax.imageio.ImageIO und wandelt sie in ein BufferedImage. Die Operation muss in einem try-catch-Block erfolgen, um Einlesefehler abzufangen. Bei Misserfolg wird null zurückgegeben, ansonsten das erzeugte BufferedImage-Objekt.

Der Methode saveBI() wird die Rückgabe von createBI() als Parameter übergeben. Ist dieser null terminiert sie mit einer Fehlermeldung und das Programm wird beendet. Wird jedoch ein korrekt erzeugtes BufferedImage übergeben, wird zunächst mit Hilfe des ebenfalls übergebenen Pfad-Strings ein File-Objekt erzeugt.
In einem try-catch-Block, der wiederum zum Abfangen von Ein-Ausgabe-Fehlern dient, wird dann versucht, die neue Datei anzulegen. Dies erfolgt nur, wenn die Datei unter dem angegebenen Pfad noch nicht existiert. Ausschließlich wenn sie auch wirklich neu angelegt wurde, wird dann das BufferdImage durch die Methode write() der Klasse ImageIO abgespeichert. Hierzu muss der Methode neben dem BufferedImage- und dem File-Objekt noch ein String des Dateityps übergeben werden. Dieses Verfahren gewährleistet, dass eine bereits vorhandene Datei nicht überschrieben wird.

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class BufferedImageToFile {

    public static void main(String[] args) {
        BufferedImageToFile bIF = new BufferedImageToFile();
        bIF.saveBI(bIF.createBI(), "testbild.png", "png");
    }

    private BufferedImage createBI() {
        BufferedImage bi = null;
        try {
            bi = ImageIO.read(new File("img/test.jpg"));
        } catch (IOException e) {
            System.err.println("Datei nicht lesbar!");
        }
        return bi;
    }

    private void saveBI(BufferedImage bi, String path, String type) {
        if (bi != null) {
            File imageFile = new File(path);
            try {
                if (imageFile.createNewFile()) {
                    ImageIO.write(bi, type, imageFile);
                }
            } catch (IOException e) {
                System.err.println("Datei konnte nicht gespeichert werden!");
            }
        } else {
            System.err.println("BufferedImage ist null");
        }
    }
}